【问题标题】:Python csv write listPython csv写入列表
【发布时间】:2012-11-27 17:17:46
【问题描述】:

我有一个将一堆行写入 csv 文件的代码。它写了我想要的,但是......它在每一列中插入括号...... 代码是:

    root_text_csv = "C:/Users/s/Desktop/text/knife"+numarul_folderelor+".csv"
    fisier_text_knife = csv.writer(open(root_text_csv,'wb'))
    row_test = []
    for filenames in os.listdir(foldere_prrra):
        knife = filenames.replace("<SP>", " ").replace(".sys", "")
        test = ['cut '+knife+' off for fuged,', 'cut '+knife+' off,', 'cut '+knife+' fool alabala,', 'cut '+knife+' nieh,', 'prrra '+knife+' alabala,',
                'cut '+knife+' fuged streaming,', 'cut '+knife+' alabala fuged,', 'cut '+knife+' off alabala,', 'prrra '+knife+' fool alabala,',
                'cut '+knife+' off fuged,', 'prrra '+knife+' niether alabala,', 'cut off '+knife+' for fuged,' 'cut '+knife+' fuged fool alabala,',
                'cut '+knife+' off niether,', 'where to cut '+knife+',', ''+knife+' fool alabala off,', 'steel '+knife+' off fuged,', 'cut '+knife+' fuged niether,',
                ''+knife+' fool alabala off,', 'fuged streaming '+knife+',', 'cut '+knife+' niether,', 'cut '+knife+' fuged,', 'red '+knife+' off,', ''+knife+' off,',
                'red '+knife+',', 'cut '+knife+',', ''+knife+' fuged,', 'fuged '+knife+',', ''+knife+' off,', 'off '+knife+',', ''+knife+',']
        random.shuffle(test)
        scris = [x for x in test if len(x) <= 30]
        row_test.append(scris) #row_test.append(scris[0])
    fisier_text_knife.writerow(row_test)

如果我将row_test.append(scris[0:7]) 替换为row_test.append(scris[0]),它只会将它们全部写入一个字符串(但写入时不带括号-->[ ]

我想写 7 或 8 行。我在这段代码上浪费了我的大脑。

感谢您的宝贵时间。

【问题讨论】:

    标签: python list csv


    【解决方案1】:

    发生这种情况的原因是因为scris 是一个列表。

    代替:

    row_test.append(scris[0:7])
    

    不如这样做:

    row_test += scris[0:7]
    

    这也有效(见下面的评论):

    row_test.extend(scris[0:7])
    

    如果仍然没有意义,请打开控制台并输入下面的示例内容。每次更改l时打印出来。

    下面的例子应该告诉你为什么这样做:

    l = [1,2,3]          #    l = [1,2,3]
    l.extend([4,5])      #now l = [1,2,3,4,5]
    l.append([6,7])      #now l = [1,2,3,4,5,[6,7]]
    l.extend('hi there') #raises an exception
    

    当您调用some_list.append(some_item) 时,它会将some_item 在内部 some_list。因此,如果some_item 也是一个列表,那么您会得到一个列表inside

    当您调用some_list.extend(some_item) 时,它加入 some_itemsome_list 的末尾。因此,如果some_item 不是列表,则会出错。

    编辑我想我现在明白你想要什么了...

    所以给定一个像 [['1','2','3'],['4','5','6'],['7','8','9']] 这样的列表,你希望 csv 看起来像:123,456,789,对吧?

    代替:

    fisier_text_knife.writerow(row_test)
    

    试试这个:

    csv_friendly = [''.join(l) for l in row_test]
    fisier_text_knife.writerow(csv_friendly)
    

    【讨论】:

    • .extend() 会比 += 更好。
    • row_test += scris[0:7] 而不是 for 循环之前的 row_test = []?我做不到... row_test = [] 是用来写专栏的。
    【解决方案2】:

    将写入文件的字符串与 print(row_test) 时相同 - 作为列表的列表。

    您可以为此使用 join 为每一行创建一个大字符串,例如:

    row_test+= ','.join(scris) + '\n'
    

    【讨论】:

    • 没错,它是一个列表列表......我怎么能写出没有那个该死的括号的列表列表?
    猜你喜欢
    • 2021-11-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-21
    • 2016-06-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多