编写一个名为“ filter_columns”的函数,该函数将一个字符串作为参数来表示具有5列的CSV文件名,格式为“ string,int,int,int,int”,并写入一个名为“ distant.csv”的文件“,仅包含输入文件中的第一和第五列。
import csv
def filter_columns(csvfile):
with open(csvfile, 'r') as rf:
reader = csv.reader(rf)
with open('distant.csv', 'w') as wf:
writer = csv.writer(wf)
for item in reader:
writer.writerow(item[0] + str(int(item[4])))
输入文件items.csv
bed,7,22,137,157
defender,14,58,185,61
我应该得到
bed,157
defender,61
但是,我得到
b,e,d,1,5,7
d,e,f,e,n,d,e,r,6,1
如何删除不需要的逗号?
答案 0 :(得分:1)
在文档https://docs.python.org/3/library/csv.html中,csvwrite.writerow带有一个可迭代的参数。
当您写item[0]+str(int(item[4]))
时,您正在生成一个字符串,它是一个字符列表。因此,输出类似于d,e,f,e,n,d,e,r,6,1
。
我可能想尝试:
import csv
def filter_columns(csvfile):
with open(csvfile, 'r') as rf:
reader = csv.reader(rf)
with open('distant.csv', 'w') as wf:
writer = csv.writer(wf)
for item in reader:
print(item)
writer.writerow([item[0]]+[str(int(item[4]))])
答案 1 :(得分:0)
您需要编辑writerow
。
writer.writerow([item[0]]+[item[4]])
答案 2 :(得分:0)
您正在将字符串item[0] + str(int(item[4]))
传递到writer.writerow
。例如,对于您要传递的第一行"bed157"
,当writer.writerow
期望可迭代(例如列表)时,它将把您要传递的字符串转换为[“ b”,“ e”,“ d “,” 1“,” 5“,” 7“]。
您需要传递一个列表/元组:
import csv
def filter_columns(csvfile):
with open(csvfile, 'r') as rf:
reader = csv.reader(rf)
with open('distant.csv', 'w') as wf:
writer = csv.writer(wf)
for row in reader:
writer.writerow([row[0], str(row[4])])
答案 3 :(得分:0)
这对我有用
import csv
def filter_columns (x):
with open(x, 'r') as f:
reader = csv.reader(f)
with open ('museum.csv', 'w') as g:
writer = csv.writer(g)
for line in reader:
writer.writerow((line[0], str(line[2])))