【问题标题】:Modify csv files?修改csv文件?
【发布时间】:2015-05-31 20:55:35
【问题描述】:

是否可以使用 Python 修改 位于同一文件夹中/目录的所有 csv 文件(总共 240 个)? csv 文件包含测试结果,这些都列在第一列而不是几列中。通过修改,我想将所有 csv 文件的逗号 (,) 替换为分号 (;) 以获得下面的示例 B):

A) 一个 csv 文件的内容示例(之前通过 Python 脚本修改):

Column A:              Column B:   Column C:   Column D:   Column E:
1, 65, 165, 484, 15,
0, 46, 49, 4, 66,

等等

B) 一个 csv 文件的内容示例(通过 Python 脚本修改后):

Column A:   Column B:   Column C:   Column D:   Column E:
1           65          165         484         15
0           46          49          4           66

等等

我还没有找到任何例子。你已经实现了类似的东西吗?还是有比 Python 更好的解决方案?我知道你可以在 Excel 中完成,但我不想重复 240 次。

更新:我的解决方案

我用下面的代码做到了,它可以工作。但是在每一行之间我有一个空行。我不明白为什么??

with open('_' + csv_name, mode="w") as outfile:
    writer = csv.writer(outfile, delimiter=';')
    with open(csv_name, mode="rU") as infile:
        print(csv_name)
        reader = csv.reader(infile, dialect="excel")
        for row in reader:
            print(row)
            writer.writerow(row)

每个与 *.py 文件位于同一文件夹的 csv 文件都会被修改。

【问题讨论】:

  • 是的,这是可能的。试一试,让我们知道你在哪里卡住了。 Python CSV
  • A)B) 两个示例都不代表 csv 文件内容。 csv 文件表示(具有逗号分隔值的文件)。在您的情况下,Column A: Column B: ... etc 本身没有任何逗号。在 B) 中,如果您将两个示例的第二行从 ,(comma) 更改为 ; (分号),那么它本身就不是一个 csv 文件。
  • csv文件格式不只一种,例如制表符和分号分隔的csv文件
  • 由于没有标准,很难争论某些东西是否是 csv。我希望大多数进口商接受 case A) as csv,第一行有一个字段。
  • 正如@Jkdc 指出的那样,python 内置了一个不错的 csv 库,您应该真正尝试使用它。 2 个答案将解决您的问题如果您的 CSV 数据没有任何编码数据(例如...一行包含“A、B、C”列,其中的逗号旨在成为该列的一部分,而不是定界符)。另请注意,您的示例令人困惑;你说你想用分号替换逗号,但你的帖子显示它被一个标签替换)

标签: python csv


【解决方案1】:

首先,您需要找到目录中所有 CSV 文件:

import os
for file in os.listdir("/mydir"):
    if file.endswith(".txt"):
        #here is where we will process each file

现在处理您需要打开的每个文件:

csv_file = open(file, mode="r")

现在我们可以读取数据了:

data = file.readlines()

然后再次关闭文件:

csv_file.close()

假设您想就地编辑它们(不更改文件名) 以写入模式重新打开同一个文件:

csv_file.open(file, mode="w")

现在我们处理数据:

for line in data:
    file.write(line.replace(",",";"))

现在我们再次关闭文件:

csv_file.close()

由于这完全是“for file in ...”循环,因此将对目录中以“.csv”结尾的每个文件重复此循环

【讨论】:

  • 嗨詹姆斯。我无法解决上面更新中写的问题。这就是为什么我现在使用你的版本并且它工作得非常好。谢谢您,祝您度过愉快的一周!
  • 我想你的代码在你更新中发生的事情是 csv 阅读器在读取每一行数据时没有剥离尾随换行符,但作者每次都添加一个,所以您可以尝试将最后一行更改为 'writer.writerow(row.rstrip())'
【解决方案2】:

使用 sed 的简单解决方案

sed -i 's/,/;/g' *.csv

【讨论】:

  • 虽然你的回答可能不错,但 OP 特指 Python
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-11-12
  • 2016-01-05
相关资源
最近更新 更多