我想读取一个以制表符分隔的文件的一栏,搜索在另一个文件中匹配的条目,然后替换该术语。

2024-07-05 10:58:45 发布

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

我有一份工作我想自动化,希望得到一些帮助:)

我有一个制表符分隔的文件,包含三列(没有标题)。前两列包含标识符,而第三列包含数字值。看起来有点像:

ID1  ID2  0.123
ID3  ID4  0.456
ID5  ID6  0.789

到目前为止,我正在使用以下代码阅读此文件的列:

^{pr2}$

太棒了。如果包含print语句,它将返回三个元组,其中包含三个相应列的条目。在

接下来我想做的是迭代另一个文件,找到与每个ID项匹配的行,并用匹配行中的“name”字段项替换原始文件中的值。第三列需要保持不变,因为它表示两个id之间的交互。在

到目前为止,我有一个函数Change_Name,它接受一个参数,打开另一个csv文件,并对其进行迭代以找到包含与ID匹配的行。一旦找到匹配项,它将打印该行上另一个字段的值。函数看起来有点像:

def Change_Name(ID):
        file_csv = csv.DictReader(open('file.csv'))
        for row in file_csv:
             if row['ID'] == ID:
                   print(row['Name'])

但是,我希望实现的是Name值被替换到与用来查找它的ID相同的位置。我已经搞乱了str.replace,但是到目前为止,我已经能够生成一个与第一个文件结构相同的文件,但是将ID替换为Name。在

我希望我的问题有一定的道理,任何帮助我们都将不胜感激。在

编辑:我被要求展示我的另一个文件的例子和我所期望的。在

我的另一个文件看起来有点像:

ID,  Name,  att1,  att2
ID1,  matt,  8,  abc
ID2,  jo,  17,  def

因此,如果我使用的是与上面所示类似的文件,我希望我的脚本替换ID1和{}条目,并将它们替换为“matt”和“jo”,如下所示:

matt  jo  0.123
ID3  ID4  0.456
ID5  ID6  0.789

等等。。。在


Tags: 文件csvnameidmattfilerowprint
1条回答
网友
1楼 · 发布于 2024-07-05 10:58:45

下面应该做你想做的。首先,它加载您的第二个文件(根据您的示例,我假设它是逗号分隔的csv)。每个条目都被存储在字典中。然后加载主制表符分隔的csv文件,并尝试用ids字典中的值替换前两列条目。如果条目不存在,它将为每个条目使用现有值:

import csv

ids = {}

with open('file 2.csv') as f_file2:
    csv_file2 = csv.reader(f_file2, skipinitialspace=True)
    header = next(csv_file2)

    for cols in csv_file2:
        ids[cols[0]] = cols[1]

with open('file 1.csv', 'rb') as f_file1, open('output.csv', 'wb') as f_output:
    csv_file1 = csv.reader(f_file1, delimiter='\t')
    csv_output = csv.writer(f_output, delimiter='\t')

    for cols in csv_file1:
        csv_output.writerow([ids.get(cols[0], cols[0]), ids.get(cols[1], cols[1]), cols[2]])

给你output.csv包含:

^{pr2}$

使用Python2.7.9测试

相关问题 更多 >