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

时间:2011-07-08 20:32:11

标签: 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 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)

任何人都可以帮我解决这个问题吗?在此先感谢您的帮助。

6 个答案:

答案 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文件的其他地方使用逗号。