csh*_*der 0 python file-format file
我试图以特定的方式在txt文件中写下面列表的值
valList = ['1','Age',' Address has spaces','employee','98363','hobbies has space in it ']
Run Code Online (Sandbox Code Playgroud)
为sample.txt
1,Age,"Address has spaces",employee,98363,"hobbies has space in it "
Run Code Online (Sandbox Code Playgroud)
在这里,如果你看到valList是一个异构列表,我的唯一目的是编写包含空格的值,用双引号括起来,其余所有值都应该按原样写出.到目前为止,我尝试过:
valList = ['1','Age',' Address has spaces','employee','98363','hobbies has space in it ']
# Output = 1,Age,"Address has spaces",employee,98363,"hobbies has space in it "
valstr = ",".join(valList)
with open('sample.txt','wb') as file:
file.write(valstr)
file.write('\n' + " \"" + valList[2] + "\" ")
Run Code Online (Sandbox Code Playgroud)
使用 file.write('\n'+"\""+ valList [2] +"\"")行我可以用引号写一个值,但是我需要一种通用的方法来写入包含空格的值对于给定的列表.
任何帮助将受到高度赞赏.
你有CSV数据.使用该csv模块,它会在需要时自动使用引用:
import csv
valList = ['1', 'Age', ' Address has spaces', 'employee', '98363', 'hobbies has space in it ']
with open('sample.txt', 'wb') as file:
writer = csv.writer(file)
writer.writerow(valList)
Run Code Online (Sandbox Code Playgroud)
这将根据需要引用值; 例如,当字段值或换行符中有逗号时.这不太符合您的确切要求,但是兼容的CSV阅读器在阅读时将能够再次从文件中获取完全相同的值.
如果必须在带空格的列上有引号,则可以禁用自动引用并手动添加引号:
import csv
valList = ['1','Age',' Address has spaces','employee','98363','hobbies has space in it ']
with open('sample.txt', 'wb') as file:
writer = csv.writer(file, quoting=csv.QUOTE_NONE, quotechar='')
writer.writerow(['"{}"'.format(v) if ' ' in v else v for v in valList])
Run Code Online (Sandbox Code Playgroud)
list comprehension用双引号中的值包含空格.请注意,因为我们在这里禁用了引用,所以它们会拒绝带有逗号或换行符的值,csv.writer()因为它现在无法引用它们.
两种方法的演示:
>>> import sys
>>> import csv
>>> valList = ['1', 'Age', ' Address has spaces', 'employee', '98363', 'hobbies has space in it ']
>>> writer = csv.writer(sys.stdout)
>>> writer.writerow(valList)
1,Age, Address has spaces,employee,98363,hobbies has space in it
>>> writer = csv.writer(sys.stdout, quoting=csv.QUOTE_NONE, quotechar='')
>>> writer.writerow(['"{}"'.format(v) if ' ' in v else v for v in valList])
1,Age," Address has spaces",employee,98363,"hobbies has space in it "
Run Code Online (Sandbox Code Playgroud)