Python解析csv文件 - 用冒号替换逗号
Posted
技术标签:
【中文标题】Python解析csv文件 - 用冒号替换逗号【英文标题】:Python parse csv file - replace commas with colons 【发布时间】:2011-10-01 14:11:15 【问题描述】:我怀疑这是一个常见问题,但我似乎找不到答案。我正在尝试从 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)
谁能帮我解决这个问题?提前感谢您的帮助。
【问题讨论】:
我从答案中看到它们是对您问题的两种解释。有些人认为您想将分隔符更改为冒号。其他人认为您想替换每个项目中的任何逗号。是哪个? 对于我的问题含糊不清,我深表歉意。我想问如何将分隔符从逗号更改为冒号。我不知道它就像将分隔符指定为冒号一样简单。出于某种原因,我认为这行不通。谢谢大家的帮助! 【参考方案1】:答案比你想象的要容易。你只需要为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
处理。
【讨论】:
非常感谢您的帮助! ...rows 未在此处定义。我不确定它应该指的是什么。 把writer.writerows(rows)
替换成writer.writerows(list(reader))
,或者更好的writer.writerows(reader)
【参考方案2】:
如果您希望读取带有逗号分隔符的 csv,并将其写入带有分号分隔符的另一个文件。我认为更直接的方法是:
reader = csv.reader(open("input.csv", "r"), delimiter=',')
writer = csv.writer(open("output.csv", 'w'), delimiter=';')
writer.writerows(reader)
我发现这个例子比with open(...)
更容易理解。
此外,如果您使用逗号和分号作为分隔符来处理文件。您可以使用 csv 文件的Sniffer 在读取文件之前检测使用了哪个分隔符(链接中的示例)。
另外,如果你想在同一个文件中重写,请查看*** answer。
【讨论】:
这里的缺点是您不会关闭已打开的文件对象,例如。f.close()
。使用with open(...)
这会自动完成。最好给它们命名并在不再需要它们后关闭它们。
利弊,在这种特殊情况下,with open(...)
只是自动关闭在我看来并没有太大帮助。
确实 @Bhanunday Sharma,U
已弃用,因此我将其删除。显然newline=None
是default 并且和U 应该做的一样:)【参考方案3】:
我将在@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)
【讨论】:
这可能是一条评论,我更新了它;) @Sylhare 是的。你说的对。但当时我没有发表评论的特权。无论如何,感谢原始和更新的答案。【参考方案4】:我正在从 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 #)
【讨论】:
【参考方案5】:假设 CSV 是逗号分隔的,并且您想在每个条目中替换逗号,我认为问题是替换了错误的项目:
for rows in reader:
for parsed_item in rows:
parsed_item = parsed_item.replace(',', ':') # Change rows to parsed_item
writer.writerow(parsed_item)
【讨论】:
【参考方案6】:如果您只是用冒号替换逗号,则根本不需要使用 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 文件的其他位置使用逗号。
【讨论】:
第4行有错字; line.replace 应该是lines.replace CSV 有一些不同的风格,但大多数都有特殊的方法来转义数据中的逗号,需要考虑到这一点,所以简单的替换是行不通的。以上是关于Python解析csv文件 - 用冒号替换逗号的主要内容,如果未能解决你的问题,请参考以下文章