[英]Python- Modifying a csv file
现在我知道在读取 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 文件,包括我在代码中跳过的标题行。
熊猫方式:
使用pandas读取文件并获取数据帧。 然后你可以简单地使用lower()
import pandas as pd
def conversion(text):
return text.lower()
df = pd.read_csv(file_path)
df[column_name] = df[column_name].map(conversion)
甚至是单个班轮:
df[column_name] = df[column_name].apply(lambda x: x.lower()) # If you have nan or other non-string values, you may need to convert x to string first like str(x).lower()
然后你可以使用to_csv函数保存它
如果您只想更改数据的大小写并保留其他所有内容,则最好跳过 csv 模块并仅使用直接文件,例如:
# Open both files
with open("infile.csv") as f_in, open("outfile.csv", 'w') as f_out:
# Write header unchanged
header = f_in.readline()
f_out.write(header)
# Transform the rest of the lines
for line in f_in:
f_out.write(line.lower())
如果您想对所有人使用 csv 模块,请使用以下代码片段。
import os
import csv
def clean(input):
tmpFile = "tmp.csv"
with open(input, "r") as file, open(tmpFile, "w") as outFile:
reader = csv.reader(file, delimiter=',')
writer = csv.writer(outFile, delimiter=',')
header = next(reader)
writer.writerow(header)
for row in reader:
colValues = []
for col in row:
colValues.append(col.lower())
writer.writerow(colValues)
os.rename(tmpFile, input)
我发现的最简单的方法如下让初始CSV
文件名是test.csv
with open('test.csv','r') as f:
with open('cleaned.csv','w') as ff:
ff.write(f.readline())
ff.write(f.read().lower())
上面的代码将创建一个全小写的新 csv
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.