【发布时间】:2024-01-25 14:17:01
【问题描述】:
我正在使用 Python 3.5。我有几个 csv 文件:
csv 文件根据固定结构命名。它们有一个固定的前缀(总是相同的)加上不同的文件名部分:
099_2019_01_01_filename1.csv
099_2019_01_01_filename2.csv
我的原始 csv 文件如下所示:
filename1-Streetname filename1-ZIPCODE
TEXT TEXT
TEXT TEXT
TEXT TEXT
TEXT TEXT
TEXT TEXT
TEXT TEXT
Street1 2012932
Street2 3023923
filename2-Name filename2-Phone
TEXT TEXT
TEXT TEXT
TEXT TEXT
TEXT TEXT
TEXT TEXT
TEXT TEXT
Name1 2012932
Name2 3023923
我正在使用以下代码操作这些文件(我正在从源文件夹读取 csv 文件并将它们写入目标文件夹。我正在跳过某些行,因为我不想包含此信息):
我切断了 TEXT 行,因为我不需要它们:
import csv
skiprows = (1,2,3,4,5,6)
for file in os.listdir(sourcefolder):
with open(os.path.join(sourcefolder,file)) as fp_in:
reader = csv.reader(fp_in, delimiter=';')
rows = [row for i, row in enumerate(reader) if i not in skiprows]
with open(os.path.join(destinationfolder,file), 'w', newline='') as fp_out:
writer = csv.writer(fp_out)
writer.writerows(rows)
(此代码有效)给出
filename1-Streetname filename1-ZIPCODE
Street1 2012932
Street2 3023923
filename2-Name filename2-Phone
Name1 2012932
Name2 3023923
第一行包含标题。在标题名称中总是有文件名(但没有 099_2019_01_01_ 前缀)加上“-”。缺少以 .csv 结尾的文件名。我想为每个 csv 文件删除这个“文件名-”。
现在的核心部分是获取第一行并且只为这一行执行替换。我需要切断前缀和 .csv,然后执行一般替换。第一个替换可能是这样的:
- 我可以从一个函数开始,因为长度是固定的,以切断前 n 个符号,或者
- 根据this 的解决方案,只需使用
string.removeprefix('099_2019_01_01_')
因为我有 Python 3.5,所以我不能使用 removeprefix,所以我尝试简单地替换它。
string.replace("099_2019_01_01_","")
然后我需要删除 .csv 这很简单:
string.replace(".csv","")
我把它放在一起,我得到了(string.replace("099_2019_01_01_","")).replace(".csv","")。 (加上最后的“-”也需要删除,见下面的代码)。我不确定这是否有效。
我现在的主要问题是这个 csv 导入代码,我不知道如何在读取/写入 csv 时只操作第一行。所以我只想在第一行替换它。我尝试过这样的事情:
import csv
skiprows = (1,2,3,4,5,6)
for file in os.listdir(sourcefolder):
with open(os.path.join(sourcefolder,file)) as fp_in:
reader = csv.reader(fp_in, delimiter=';')
rows = [row for i, row in enumerate(reader) if i not in skiprows]
with open(os.path.join(destinationfolder,file), 'w', newline='') as fp_out:
writer = csv.writer(fp_out)
rows[0].replace((file.replace("099_2019_01_01_","")).replace(".csv","")+"-","")
writer.writerows(rows)
这会产生错误,因为 rows[0] 的想法不起作用。我该怎么做?
(我不确定是否应该尝试在代码中包含此替换或将其放入在第一个代码之后运行的第二个代码中。但是,我假设我会再次读写 csv 文件。所以我认为将它实现到这段代码中是最有效的。否则我需要再次打开并更改并保存每个文件。但是,如果无法将它包含到这段代码中,我也可以使用运行 stand 的代码- 单独进行替换,假设 csv 文件将第 0 行作为标题,然后数据来了。)
请注意,我确实想使用 csv 而不是使用 pandas。
编辑: 最后,csv 文件应如下所示:
Streetname ZIPCode
Street1 9999
Street2 9848
Name Phone
Name1 23421
Name2 23232
【问题讨论】: