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

在Python中,从文本文件的列中删除前导零,然后将两个文本文件中具有相同字符串的类似行合并为一个,python,csv,merge,Python,Csv,Merge,假设我有两个文件- File 1: 00023 apple 00632 banana 00020 cat 00290 dog 00004 egg 00089 hen 00310 ink 因此,首先在文件1中,我需要修剪第1列的前导零。我们将得到如下结果: 23 apple 632 banana 20 cat 290 dog 4 egg 89 hen 310 ink 在此之后,我想比较文件1和文件2中的公共编号(在本例中为23、4、310),然后将公共列合并到一个新文件中,并生成类似于此的输

假设我有两个文件-

File 1:

00023 apple
00632 banana
00020 cat
00290 dog
00004 egg
00089 hen
00310 ink
因此,首先在文件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

我在这里已经讨论了一些答案,但无法真正理解,因为我对这一点还是新手。

因此,您可以轻松检查您的值。我已经用下面的源代码试过了。 我首先创建了两个数据帧(您已经有了),其中包含一个值从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
如果您想在数据之间添加一个“,”,请在迭代中更改“连接”行


致以最诚挚的问候

,您可以轻松地检查您的值。我已经用下面的源代码试过了。 我首先创建了两个数据帧(您已经有了),其中包含一个值从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
如果您想在数据之间添加一个“,”,请在迭代中更改“连接”行


致以最诚挚的问候

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

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

接下来,利用dictionary键视图支持的set操作的优势来查找公共键,如

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

导入csv
将open('csv1.csv',换行符='')作为f:
读卡器=csv。读卡器(f)
data1={col1.lstrip('0'):col1的col2,读取器中的col2}
将open('csv2.csv',换行符='')作为f:
读卡器=csv。读卡器(f)
data2={col1:col2代表col1,col2在读卡器中}
common_keys=data1.keys()&data2.keys()
将open('merge.csv','w',newline='')作为f:
writer=csv.writer(f)
对于常用_键中的键:
writer.writerow([key,data1[key],data2[key]]))

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

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

接下来,利用dictionary键视图支持的set操作的优势来查找公共键,如

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

导入csv
将open('csv1.csv',换行符='')作为f:
读卡器=csv。读卡器(f)
data1={col1.lstrip('0'):col1的col2,读取器中的col2}
将open('csv2.csv',换行符='')作为f:
读卡器=csv。读卡器(f)
data2={col1:col2代表col1,col2在读卡器中}
common_keys=data1.keys()&data2.keys()
将open('merge.csv','w',newline='')作为f:
writer=csv.writer(f)
对于常用_键中的键:
writer.writerow([key,data1[key],data2[key]]))

我想这不是我在上面问题中描述的输出,你能再看看我的问题吗?@sirbaum这只是因为我用数字初始化了这个数据框。用你自己的数据框试试看我想这不是我在上面问题中描述的输出,你能再看看我的问题吗打开?@sirbaum这只是因为我用数字初始化了这个数据帧。用你自己的数据帧试试