【问题标题】:Python - Problem in appending lines to output file with specific conditionPython - 将行附加到具有特定条件的输出文件时出现问题
【发布时间】:2023-01-30 13:56:26
【问题描述】:

我的问题如下:

我有一个文件,其中的行通常以“ab”开头,条件是当行不是以 ab 开头时,它应该附加到上一行,但有些行没有附加到输出文件

Source File:
grpid;UserGroup;Name;Description;Owner;Visibility;Members -> heading
ab;user1;name1;des1;bhalji;public
sss
ddd
fff
ab;user2;name2;des2;bhalji;private -> not appended in output

ab;user3;name3;des3;bhalji;public -> not appended in output

ab;user4;name4;des4;bhalji;private
rrr
ttt
yyy
uuu

ab;user5;name5;des5;bhalji;private
ttt
ooo
ppp

这是我正在使用 python 做的事情:

def grouping():
    output = []
    temp = []
    currIdLine = ""
    with( open ('usergroups.csv', 'r')) as f:
        for lines in f.readlines(): 
            line = lines.strip()
            if not line:
               print("Skipping empty line")
               continue 
            if line.startswith('grpid'): 
               output.append(line)
               continue 
            if line.startswith('ab'):
                if temp:
                   output.append(currIdLine + ";" + ','.join(temp))
                   temp.clear()
                currIdLine = line
            else:
                temp.append(line)
    output.append(currIdLine + ";" + ','.join(temp))

        #print("\n".join(output))
        
        with open('new.csv', 'w') as f1:
            for row in output:
                f1.write(row + '\n')

grouping ()

Output of the above code:
grpid;UserGroup;Name;Description;Owner;Visibility;Members
ab;user1;name1;des1;bhalji;public;sss,ddd,fff
ab;user4;name4;des4;bhalji;private;rrr,ttt,yyy,uuu
ab;user5;name5;des5;bhalji;private;ttt,ooo,ppp

我希望这对 Python 来说应该很容易,但到目前为止我还没有做对。

这就是文件最后的样子:

Expected Output:
grpid;UserGroup;Name;Description;Owner;Visibility;Members
ab;user1;name1;des1;bhalji;public;sss,ddd,fff
ab;user2;name2;des2;bhalji;private
ab;user3;name3;des3;bhalji;public
ab;user4;name4;des4;bhalji;private;rrr,ttt,yyy,uuu
ab;user5;name5;des5;bhalji;private;ttt,ooo,ppp

【问题讨论】:

    标签: python


    【解决方案1】:

    你很接近。缺少一个else语句来处理本行以ab开头,而上一行以ab开头的情况。

    def grouping():
        output = []
        temp = []
        currIdLine = ""
        with(open('usergroups.csv', 'r')) as f:
            header = f.readline()
            output.append(line.strip())
            temp = []
            for line in f.readlines():
                if not line:
                    print("Skipping empty line")
                    continue
                if line.startswith('ab'):
                    if temp:
                        output.append(currIdLine + ";" + ','.join(temp))
                        temp = []
                    else:
                        output.append(currIdLine)
                    currIdLine = line.strip()
                else:
                    temp.append(line.strip())
        if temp:
            output.append(currIdLine + ";" + ','.join(temp))
        else:   # <-- this block is needed
            output.append(currIdLine)
           
    
        with open('new.csv', 'w') as f1:
            for row in output:
                f1.write(row + '
    ')
    

    【讨论】:

    • 它的工作,抱歉我没有足够的声誉来投票给你的答案
    猜你喜欢
    • 2011-09-09
    • 1970-01-01
    • 2016-01-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-20
    • 1970-01-01
    • 2015-11-10
    相关资源
    最近更新 更多