如何更改CSV文件中使用的分隔符?

4
为了一个研究项目,我有很多csv文件需要从逗号(,)分隔符更改为分号(;)分隔符。所以我只需要更改分隔符。
通常我会在Excel中处理,但这需要很多工作。而且我需要为每个文件单独处理,而且Excel处理它需要很长时间。
我已经创建了一个输入和输出文件夹,在下面的代码中可以正常工作。问题是:
1. 逗号没有变成分号。 2. 出于某种原因,它会添加一个空白行,我不知道为什么会这样。
有人能给一些提示吗?
import csv 
from pathlib import Path

folder_in = Path(r'C:\convert\Trajectory\In') 
folder_out = Path(r'C:\convert\Trajectory\Out')

for incsv in folder_in.iterdir():
    outcsv = folder_out.joinpath(incsv.name)
    with open(str(incsv), 'r') as fin, open(str(outcsv), 'w') as fout:
        reader = csv.DictReader(fin)
        writer = csv.DictWriter(fout, reader.fieldnames, delimiter=';')
        writer.writeheader()
        writer.writerows(reader)

1
delimiter=';' 应该是分号。 - Willem Van Onsem
抱歉,我复制了我正在玩耍的代码。实际上,有一个分号。 - Bjorn ten Broeke
请查看此链接 https://unix.stackexchange.com/questions/159367/using-sed-to-find-and-replace - caot
1
@caot Bjorn正在使用Windows,他可能没有sed或等效的程序。 - PM 2Ring
1
我不知道为什么代码对你不起作用。(我没有得到不想要的空白行,因为我使用的是Linux)。但是,如果你想在文件中对每个逗号进行简单的搜索和替换,有一种更简单的方法可以做到这一点,你不需要使用csv模块。只需将整个文件读入字符串并使用str.replace方法即可。 - PM 2Ring
显示剩余8条评论
1个回答

8

这里没有答案,我建议在同一个文件中实现csv逗号到分号的转换:

path="file_to_convert.csv"

reader = list(csv.reader(open(path, "rU"), delimiter=','))
writer = csv.writer(open(path, 'w'), delimiter=';')
writer.writerows(row for row in reader)

我使用了list()方法以保留reader的内容,并重新打开文件进行写入。
如果您不需要在同一文件中进行更改,可以查看这个答案

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接