打印到控制台.现在我要打印成CSV文件



我可以读取带有名称的文本文件,并按升序打印到控制台。我只是想将排序后的名称写入CSV文件中的一列。我不能把打印出来的文件发送到CSV吗?谢谢!

import csv
with open('/users/h/documents/pyprojects/boy-names.txt','r') as file:
for file in sorted(file):
print(file, end='')
#the following isn't working. 
with open('/users/h/documents/pyprojects/boy-names.csv', 'w', newline='') as csvFile:
names = ['Column1']
writer = csv.writer(names)
print(file)

你可以这样做:

import csv
with open('boy-names.txt', 'rt') as file, open('boy-names.csv', 'w', newline='') as csv_file:
csv_writer = csv.writer(csv_file, quoting=csv.QUOTE_MINIMAL)
csv_writer.writerow(['Column1'])
for boy_name in sorted(file.readlines()):
boy_name = boy_name.rstrip('n')
print(boy_name)
csv_writer.writerow([boy_name])

这在文档中有介绍。

唯一棘手的部分是将文件中的行转换为包含1个元素的列表。
import csv
with open('/users/h/documents/pyprojects/boy-names.txt','r') as file:
names = [[k.strip()] for k in sorted(file.readlines())]
with open('/users/h/documents/pyprojects/boy-names.csv', 'w', newline='') as csvFile:
writer = csv.writer(csvFile)
writer.writerow(['Column1'])
writer.writerows(names)
因此,names将包含(例如):
[['Able'],['Baker'],['Charlie'],['Delta']]

CSV记录器期望写入一行或一组行。每一行必须是一个列表(或元组)。所以我才这么做的。通过调用writerows,外部列表包含要写入的行集。外列表的每个元素都是一行。我希望每行包含一项,因此每行是一个单元素列表。

如果我创建了这个:

['Able','Baker','Charlie','Delta']

writerows将每个字符串视为一个序列,从而产生如下所示的CSV文件:

A,b,l,e
B,a,k,e,r
C,h,a,r,l,i,e
D,e,l,t,a

这是有趣的,但不是很有用。我知道这一点,因为我是在写答案的时候写的。