gpt4 book ai didi

python - 如何从 1 个 txt 文件中获取值并附加到另一个文件?

转载 作者:太空宇宙 更新时间:2023-11-04 12:54:44 24 4
gpt4 key购买 nike

我有 2 个文本文件。 “A.txt”包含

A 1 AB ... 1 5 -3 4.5 (contains 11 columns. So "4.5" is in the 11th column)
A 2 BC ... -2 3 8 9.2
A 3 WE ... 2 3 8 5.2
A 4 RT ... 23 2 24 4.1
...
END

“B.txt”类似,只是最后两列与“A.txt”不同。另一个区别是“B.txt”包含一些“A.txt”中没有的附加行。例如,第三行 A 3 QEW ... 5 23 34 5 在“B.txt”中但不在“A.txt”中

A 1 AB ... 1 5 4 9
A 2 BC ... -2 3 1 0
A 3 QEW ... 5 23 34 5
A 4 WE ... 2 3 -7 56
A 5 RT ... 23 2 -5 14
...
END

我想做的是提取“A.txt”每一行中最后一列的值,并将其附加到“B.txt”中的相应行。对于“B.txt”中不在“A.txt”中的每一行,如果第 3 列元素以字母“Q”(例如 QEW)开头,我想附加值 1,否则附加值 2 .所以输出应该是这样的

A 1 AB ... 1 5 4 9 4.5
A 2 BC ... -2 3 1 0 9.2
A 3 QEW ... 5 23 34 5 1
A 4 WE ... 2 3 -7 56 5.2
A 5 RT ... 23 2 -5 14 4.1
...
END

我尝试了下面的代码,但它没有生成任何输出。我做错了什么吗?

def main():
#enter python code.py A.txt B.txt in command line
A = open(sys.argv[1])

AAlist = []
TE = []
i=1
for line in A:
linestr = ' '.join(line.split())
if linestr[1]==i:
AAlist.append(linestr[2])
TE.append(linestr[10])
i+=1

BAlist = []
i=0
j=0
with open(sys.argv[2]) as B, open('outputpy.txt', 'w') as out_file:
for line in B:
linestr = ' '.join(line.split())
if linestr[1]==j:
at = linestr[2]
BAlist.append(atm)
if at!=AAlist[i]:
if at[0]=='Q':
out_file.write(1)
else:
out_file.write(2)

#print >> outfile
out_file.write(TE[i])
i+=1
j+=1
print "finished"

有没有一种方法可以使用 Linux 命令进行我想要的操作?它比 Python 代码更容易吗?

编辑:我展示了输出应该是什么样子

最佳答案

如果我对你的理解正确,下面的 awk 脚本应该做你想做的:

NR==FNR{
arr[$3] = $11
next
}
{
if ($3 in arr){
print($0, arr[$3])
}else if ($3 == "^Q"){
print($0, "2")
}else{
print($0, "1")
}
}

运行它

awk -f script.awk f1 f2

NR==FNR 对第一个文件为真,对所有其他文件为假,所以在第一部分我们只填充一个名为 arr 的数组案件。它填充了第 3 个字段的键,并具有第 11 个字段的值。您可以将 $3 替换为例如$1$2$3 如果第二个文件中的匹配是用前三个字段完成的(另请参阅我在您的问题下的评论)。

对于第二个文件,如果可以在数组中找到键,我们追加它。如果不是,我们检查第 3 个字段的第一个字母是否为 Q。如果是这种情况,我们附加一个 2。否则我们附加一个 1。

关于python - 如何从 1 个 txt 文件中获取值并附加到另一个文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36122917/

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