如何将列表元素写入制表符分隔的文件中?

Ana*_*sia 3 python csv file list

我在网上搜索过,但没有找到我的问题的答案:

我有一本以列表为元素的字典,每个列表都有不同的长度。例如这样:

dict_with_lists[value1] = [word1, word2, word3, word4]
dict_with_lists[value2] = [word1, word2, word3]
Run Code Online (Sandbox Code Playgroud)

我的主要问题是,我想将列表元素写入一个应该以制表符分隔的文件中,如果列表完成,它应该在新行中写入新列表。

我找到了这样的解决方案:

with open('fname', 'w') as file:
   file.writelines('\t'.join(i) + '\n' for i in nested_list)
Run Code Online (Sandbox Code Playgroud)

但它不仅用制表符分隔单词,还用制表符分隔字符。

Mar*_*ers 6

如果nested_list是您的字典值之一,那么您将应用于'\t'.join()各个单词。您想加入整个列表

file.write('\t'.join(nested_list) + '\n')
Run Code Online (Sandbox Code Playgroud)

或者,如果您要循环字典的值:

file.writelines(
    '\t'.join(nested_list) + '\n'
    for nested_list in dict_with_lists.values())
Run Code Online (Sandbox Code Playgroud)

以上正确使用file.writelines()方法;传入一个可迭代的字符串来 write。如果您要传递单个字符串,那么只会导致 Python 进行额外的工作,因为它会循环遍历该字符串的所有单个字符以分别写入这些字符,之后底层缓冲区必须再次将这些字符组装回更大的字符串。

然而,这里没有必要重新发明字符分隔值书写轮。使用csv模块,将分隔符设置为'\t'

import csv

with open('fname', 'w', newline='') as file:
    writer = csv.writer(file, delimiter='\t')
    writer.writerows(dict_with_lists.values())
Run Code Online (Sandbox Code Playgroud)

上面将字典中的所有列表dict_with_lists写入文件。该csv.writer()对象不介意列表的长度是否不同。