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)
但它不仅用制表符分隔单词,还用制表符分隔字符。
如果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()对象不介意列表的长度是否不同。