【发布时间】:2017-11-07 06:31:57
【问题描述】:
现在我知道在读取 csv 文件时修改它通常是不可行的,因此您需要创建一个新的 csv 文件并写入它。我遇到的问题是保留数据的原始顺序。
输入的 csv 文件如下所示:
C1 C2 C3
apple BANANA Mango
pear PineApple StRaWbeRRy
我想将所有数据转成小写并输出一个新的 csv 文件,如下所示:
C1 C2 C3
apple banana mango
pear pineapple strawberry
到目前为止,我可以遍历输入 csv 文件并将所有值转换为小写,但我不知道如何将其重写为该格式的 csv 文件。我的代码是:
def clean (input)
aList = []
file = open(input, "r")
reader = csv.reader(file, delimiter = ',')
next(reader, None) # Skip the header but I want to preserve it in the output csv file
for row in reader:
for col in row:
aList.append(col.lower())
所以现在我有一个包含所有小写数据的列表,如何将其重写为与输入格式相同(行数和列数相同)的 csv 文件,包括我在代码中跳过的标题行.
【问题讨论】:
-
不要费心将行保存到列表中。只需同时打开您的输入和输出文件,这样您就可以在创建时编写每个修改的行。事实上,我什至不会为此使用
csv模块。很遗憾您需要保留标题行的大小写,否则您可以使用tr程序处理整个文件(如果您使用的是类 Unix 操作系统)。 -
与熊猫:
pd.read_csv(input).apply(str.lower).to_csv(input) -
我刚刚注意到您的代码将
,指定为分隔符,但您的示例数据使用空格。请解释! -
@PM2Ring 如果您使用 head 命令抓取标题,您仍然可以使用命令行工具。
-
@PM2Ring 我只是在这里以这种方式表示数据。输入位于包含这些行和列的 csv 文件中。话虽如此,我也不知道为什么 delimiter ,但它确实有效!最初是个错误,但效果很好