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文件 - 用冒号替换逗号的主要内容,如果未能解决你的问题,请参考以下文章

C# 自定义标准 读写CSV文件

C# 自定义标准 读写CSV文件

用 .csv 文件中的 VBA 仅在 3 列中用分号替换逗号

用python把一个txt文件中所有逗号,替换成空格?

pyparsing用分号而不是逗号解析csv文件

在包括冒号之前删除所有内容并将逗号替换为换行符