繁体   English   中英

导入 csv:从第一行的列名中删除文件名

[英]Import csv: remove filename from column names in first row

我正在使用 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 文件并将它们写入目标文件夹。我跳过某些行,因为我不想包含此信息):

我切断了文本行,因为我不需要它们:

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

第一行包含 header。在 header 名称中始终有文件名(但没有 099_2019_01_01_ 前缀)加上一个“-”。 缺少以 .csv 结尾的文件名。 我想为每个 csv 文件删除这个“文件名-”。

现在的核心部分是获取第一行,并且只针对这一行进行替换。 我需要切断前缀和 the.csv,然后执行一般替换。 第一个替换可能是这样的:

  1. 我可以从 function 开始切掉前 n 个符号,因为长度是固定的,或者
  2. 根据解决方案,只需使用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 个文件。所以我认为它会将它实现到这段代码中是最有效的。否则我需要再次打开、更改和保存每个文件。但是,如果不可能将它包含到这段代码中,我也可以使用独立运行的代码只是假设 csv 文件的第 0 行为 header,然后数据就来了。)

请注意,我确实希望通过这种方式使用 go 和 csv,而不是使用 pandas。

编辑:最后 csv 文件应如下所示:

Streetname ZIPCode
Street1 9999
Street2 9848

Name Phone
Name1 23421
Name2 23232

尝试替换这个:

rows[0].replace((file.replace("099_2019_01_01_","")).replace(".csv","")+"-","")

通过这个在你的代码中:

x=file.replace('099_2019_01_01_','').replace('.csv', '')
rows[0]=[i.replace(x+'-', '') for i in rows[0]]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM