在Python中,从文本文件的列中删除前导零,然后将两个文本文件中具有相同字符串的类似行合并为一个

2024-05-08 17:35:42 发布

您现在位置:Python中文网/ 问答频道 /正文

假设我有2个文件-

File 1:

00023 apple
00632 banana
00020 cat
00290 dog
00004 egg
00089 hen
00310 ink
File 2:

45 fan
23 jar
339 goat
4 kite
310 land

因此,首先在文件1中,我需要修剪第1列的前导零。我们将得到如下结果:

23 apple
632 banana
20 cat
290 dog
4 egg
89 hen
310 ink

在此之后,我想比较文件1和文件2中的公共编号(在本例中为23、4、310),然后将公共列合并到一个新文件中,并生成类似以下内容的输出-

23 apple jar
4 egg kite
310 ink land

我已经在这里找到了一些答案,但无法真正理解,因为我对这一点还不熟悉


Tags: 文件appleeggcatjarfilebananakite
2条回答

这可以使用标准库中的csv模块完成

首先,使用字典理解将每个文件读入字典(可以使用str.lstrip方法删除前导零)

接下来,利用dictionary键视图支持intersection等集合操作这一事实来查找公共键

最后,将公共密钥和关联值写入新的csv文件

import csv 


with open('csv1.csv', newline='') as f:
    reader = csv.reader(f)
    data1 = {col1.lstrip('0'): col2 for col1, col2 in reader}


with open('csv2.csv', newline='') as f:
    reader = csv.reader(f)
    data2 = {col1: col2 for col1, col2 in reader}


common_keys = data1.keys() & data2.keys()


with open('merge.csv', 'w', newline='') as f:
    writer = csv.writer(f)
    for key in common_keys:
        writer.writerow([key, data1[key], data2[key]])

因此,您可以轻松检查您的值。我已经用下面的源代码试过了。 我首先创建了两个数据帧(您已经有了),其中包含一个值从0到399的列表:

    import pandas
    df1 = pandas.DataFrame({"col1": list(range(400))})
    df2 = df1

然后用搜索索引初始化一个列表,并迭代该列表

  search_idx = [23, 4, 310]

您的dataframe对象具有列。每列都有一个名称。在我的示例中:我只有一列,该列的名称为“col1”。列名是dataframe对象的一个字段,因此可以通过点操作访问它

   #Open the file
   with open('merge.txt', 'a') as file:
        
       #Iterate over all indexes       
       for idx in search_idx:

           #Write Values to list
           values = [idx, df1.col1[idx], df2.col1[idx]]
          
           #convert to string
           values = map(str, values)

           #Concatenate to one string and write to file
           text = " ".join(values)
           file.write(text + '\n')

这将创建一个包含以下数据的文件merge.txt:

    23 23 23
    4 4 4
    310 310 310

如果您想在数据之间添加一个“,”,请在迭代中更改“连接”行

致意

相关问题 更多 >