Python解析csv文件-用冒号替换逗号
我怀疑这是一个常见的问题,但我似乎找不到答案。我正在尝试从csv文件中删除所有逗号,并用冒号替换它们。我通常会使用sed或vi来实现这一点,但我需要使用纯python实现。以下是我到目前为止的想法:Python解析csv文件-用冒号替换逗号,python,parsing,csv,Python,Parsing,Csv,我怀疑这是一个常见的问题,但我似乎找不到答案。我正在尝试从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 o
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)
有人能帮我解决这个问题吗?提前感谢您的帮助。答案比您想象的要简单。您只需设置
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处理。如果您只是用冒号替换逗号,则根本不需要使用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文件中的其他位置不能有逗号。假设csv以逗号分隔,并且您希望在每个条目中替换逗号,我认为问题在于替换了错误的项:
for rows in reader:
for parsed_item in rows:
parsed_item = parsed_item.replace(',', ':') # Change rows to parsed_item
writer.writerow(parsed_item)
如果您希望使用逗号分隔符读取csv,并使用分号分隔符将其写入另一个文件中。我认为更直接的方法是:
reader=csv.reader(打开(“input.csv”,“r”),分隔符=',')
writer=csv.writer(打开(“output.csv”,w'),分隔符=';')
writer.writerows(reader)
我发现这个例子比使用open(…)
的更容易理解。
此外,如果您使用逗号和分号作为分隔符处理文件,也会出现这种情况。在读取文件之前,可以使用csv文件的名称来检测使用的分隔符(链接中的示例)
另外,如果要在同一文件中重写,请选中此项。我正在从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 #)
我将根据@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)
我从答案中看出,他们对你的问题有两种解释。有些人认为你想把delimeter换成冒号。其他人认为您需要替换每个项目中的任何逗号。是哪一个?我为我问题的模糊性道歉。我想问一下如何将分隔符从逗号改为冒号。我不知道它会像将分隔符指定为冒号那样简单。出于某种原因,我认为那是行不通的。谢谢大家的帮助!非常感谢你的帮助!。。。此处未定义行。我不确定它应该指的是什么。将writer.writerows(行)
替换为writer.writerows(list(reader))
,或者更好的是writer.writerows(reader)
第四行有一个打字错误;line.replace应该是lines.replaceCV有一些不同的风格,但在大多数情况下,有一些特殊的方法来转义数据中的逗号,这需要加以考虑,因此简单的替换是不行的。这里的缺点是您不关闭已打开的文件对象,例如f.close()
。使用带有open(…)的
可以自动完成此操作。最好在你不再需要它们后命名并关闭它们。优点和缺点,在这个特殊情况下,带有open(…)
的自动关闭在我看来并没有多大帮助。事实上,U
已被弃用,所以我将其删除。显然,newline=None
是最新版本,并且做了与U应该做的相同的事情:)这可能是一个注释,我更新了它;)@是的。你是对的。但当时我没有权利发表评论。无论如何,谢谢你的原始和更新的答案。