Python解析csv文件-用冒号替换逗号

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

我怀疑这是一个常见的问题,但我似乎找不到答案。我正在尝试从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)

有人能帮我解决这个问题吗?提前感谢您的帮助。

答案比您想象的要简单。您只需设置
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应该做的相同的事情:)这可能是一个注释,我更新了它;)@是的。你是对的。但当时我没有权利发表评论。无论如何,谢谢你的原始和更新的答案。