我怀疑这是一个常见的问题,但我似乎找不到答案。我试图从csv文件中删除所有逗号并用冒号替换它们。我通常会使用sed或vi,但我需要使用纯粹的python实现。这是我到目前为止所提出的:
import csv
with open("temp.csv", mode="rU") as infile:
reader = csv.reader(infile, dialect="excel")
with open("temp2.txt", mode="w") as outfile:
writer = csv.writer(outfile)
for rows in reader:
for parsed_item in rows:
parsed_item = rows.replace(',', ':') # I can't do this with a list!
writer.writerow(parsed_item)
任何人都可以帮我解决这个问题吗?在此先感谢您的帮助。
答案 0 :(得分:20)
答案比你想象的要容易。您只需要为csv.writer
设置分隔符:
import csv
row = #your data
with open("temp.csv", mode="rU") as infile:
reader = csv.reader(infile, dialect="excel")
with open("temp2.txt", mode="w") as outfile:
writer = csv.writer(outfile, delimiter=':')
writer.writerows(rows)
您尝试将,
替换为:
并不会做任何事情,因为该行已由csv.reader
处理过。
答案 1 :(得分:4)
如果您希望使用逗号分隔符读取csv并使用分号分隔符将其写入另一个文件。我认为更简单的方法是:
reader = csv.reader(open("input.csv", "rU"), delimiter=',')
writer = csv.writer(open("output.csv", 'w'), delimiter=';')
writer.writerows(reader)
我发现这个示例比使用with open(...)
更容易理解。
此外,如果您使用逗号和分号作为分隔符使用文件。您可以使用csv文件的Sniffer来检测在读取文件之前使用的分隔符(链接中的示例)。
此外,如果您要在同一文件中重写,请检查此stackoverflow answer。
答案 2 :(得分:0)
我正在从JSON原始数据写入csv文件,并注意到DictWriter
模块还支持不同的定界符。示例:
with open('file_1.csv', 'w', encoding="utf-8-sig", newline = '') as myfile:
wr = csv.DictWriter(myfile, fieldnames = table_fields, delimiter=';')
wr.writeheader()
wr.writerows(# my data #)
答案 3 :(得分:0)
我将以@Sylhare的答案为基础。在python3中,不赞成使用'U'模式。因此,以下解决方案对我有用:
import csv
reader = csv.reader(open("input.csv", newline=None), delimiter=',')
writer = csv.writer(open("output.csv", 'w'), delimiter=':')
writer.writerows(reader)
答案 4 :(得分:-1)
假设CSV以逗号分隔,并且您想要在每个条目中替换逗号,我认为问题是替换了错误的项目:
for rows in reader:
for parsed_item in rows:
parsed_item = parsed_item.replace(',', ':') # Change rows to parsed_item
writer.writerow(parsed_item)
答案 5 :(得分:-2)
如果您只是用冒号替换逗号,则根本不需要使用csv解析器。
with open("file.csv", 'r') as f:
with open("temp.csv", 'w') as t:
for lines in f:
new_line = line.replace(",",":")
t.write(new_line)
唯一需要注意的是,你不能在csv文件的其他地方使用逗号。