gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 16:38:03 25 4
gpt4 key购买 nike

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

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

ID1  ID2  0.123
ID3 ID4 0.456
ID5 ID6 0.789

到目前为止,我正在使用这段代码读取该文件的列:

with open(f) as tsv:
for column in zip(*[line for line in csv.reader(tsv, delimiter="\t")]):
for i in column:
Change_Name(i)

这太棒了。如果我包含一条打印语句,它将返回三个元组,其中包含三个相应列的条目。

接下来我想做的是迭代另一个文件,找到与每个 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替换为名称

我希望我的问题有意义,非常感谢任何帮助。

编辑:我被要求展示我的其他文件的示例以及我所期望的内容。

我的其他文件看起来有点像:

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

因此,如果我使用像上面所示的文件,我希望我的脚本替换 ID1ID2 条目,并将它们替换为“matt” ' 和 'jo',就像这样:

matt  jo  0.123
ID3 ID4 0.456
ID5 ID6 0.789

等等...

最佳答案

以下内容应该可以完成您想要做的事情。首先,它加载您的第二个文件(根据您的示例,我假设它是逗号分隔的 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,其中包含:

matt    jo  0.123
ID3 ID4 0.456
ID5 ID6 0.789

使用 Python 2.7.9 进行测试

关于python - 我想读取制表符分隔文件的一列,在另一个文件中搜索匹配的条目,然后替换该术语,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37053364/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com