Python 有没有一种方法可以根据字段(比如说字段3)从两个文件(anb)中获取唯一的行,如果存在重复项,则a优先?
我有两个文件A.txt和B.txt。我需要一个按字段2列出的唯一行列表,其中a.txt优先于B.txt cat A.txt: HHH,香蕉,3Python 有没有一种方法可以根据字段(比如说字段3)从两个文件(anb)中获取唯一的行,如果存在重复项,则a优先?,python,bash,Python,Bash,我有两个文件A.txt和B.txt。我需要一个按字段2列出的唯一行列表,其中a.txt优先于B.txt cat A.txt: HHH,香蕉,3 HHH,苹果,2 JJJ,柠檬,100 cat B.txt: LLL,梨,4 CCC,苹果,9 TTT,柠檬,9 结果应该是: HHH,香蕉,3 HHH,苹果,2 JJJ,柠檬,100 LLL,梨,4 值lemon和apple在两个文件中重复,但A.txt优先 我试着在bash中使用gawk、sed和cut来实现它,但这看起来太混乱了。另外,我被告知这必
HHH,苹果,2
JJJ,柠檬,100
cat B.txt: LLL,梨,4
CCC,苹果,9
TTT,柠檬,9
结果应该是: HHH,香蕉,3
HHH,苹果,2
JJJ,柠檬,100
LLL,梨,4
值lemon和apple在两个文件中重复,但A.txt优先 我试着在bash中使用gawk、sed和cut来实现它,但这看起来太混乱了。另外,我被告知这必须是python 没有代码显示。请求帮助 结果应该是: HHH,香蕉,3
HHH,苹果,2
JJJ,柠檬,100
LLL,pear,4
您可以使用以下
awk
命令:
awk -F, '!d[$2]++' A.txt B.txt
这将产生:
HHH,banana,3
HHH,apple,2
JJJ,lemon,100
LLL,pear,4
说明:
告诉-F,
使用awk
作为字段分隔符,
是一个数组,用于存储看到给定密钥的次数d
指的是第二个字段,它是要用来唯一标识行的键$2
- 对于脚本第一次看到的每个键,
将自动计算为d[$2]
0
- 使用not运算符
代码>,
变为真值,!0
将执行打印整行的默认操作awk
- 使用紧跟在
之后的d[$2]
运算符,++
的值将在计算其值后增加d[$2]
1
- 因此,下次脚本看到具有相同键的行时,
将为非零,并且d[$2]
将导致一个假值,!d[$2]
因此不会执行任何操作awk
列在a.txt
之前,因此首先处理它,因此它的行优先于b.txt
b.txt
awk
命令:
awk -F, '!d[$2]++' A.txt B.txt
这将产生:
HHH,banana,3
HHH,apple,2
JJJ,lemon,100
LLL,pear,4
说明:
告诉-F,
使用awk
作为字段分隔符,
是一个数组,用于存储看到给定密钥的次数d
指的是第二个字段,它是要用来唯一标识行的键$2
- 对于脚本第一次看到的每个键,
将自动计算为d[$2]
0
- 使用not运算符
代码>,
变为真值,!0
将执行打印整行的默认操作awk
- 使用紧跟在
之后的d[$2]
运算符,++
的值将在计算其值后增加d[$2]
1
- 因此,下次脚本看到具有相同键的行时,
将为非零,并且d[$2]
将导致一个假值,!d[$2]
因此不会执行任何操作awk
列在a.txt
之前,因此首先处理它,因此它的行优先于b.txt
b.txt
def openFile(path):
with open(path) as file:
return file.read()
A=[i.split(',') for i in openFile('A.txt').split('\n')]
B=[i.split(',') for i in openFile('B.txt').split('\n')]
C=[]
for i in [A,B]:
for y in i:
if not any([y[1]==z[1] for z in C]):
C.append(y)
with open('C.txt','w') as file:
file.write('\n'.join([','.join(i) for i in C]))
您需要读取这些文件,按endOfLine拆分,然后按“,”拆分。之后,您将得到一个二维列表。您循环浏览这两个列表(首先提供一个)。然后你在这些行中循环。检查所有C行的第二个元素是否与当前列表行的第二个元素相等。如果为true,则追加此行。然后我们将结果保存到文件C.txt中
def openFile(path):
with open(path) as file:
return file.read()
A=[i.split(',') for i in openFile('A.txt').split('\n')]
B=[i.split(',') for i in openFile('B.txt').split('\n')]
C=[]
for i in [A,B]:
for y in i:
if not any([y[1]==z[1] for z in C]):
C.append(y)
with open('C.txt','w') as file:
file.write('\n'.join([','.join(i) for i in C]))
“无代码显示”通常是一个问题,因为本网站要求在您的问题中添加一个更好的语言,以更好地表达您知道多少,您尝试了什么,以及如何最好地帮助“无代码显示”通常是一个问题,因为本网站要求在您的问题中添加一个更好的语言,以更好地表达您知道多少,您尝试了什么,以及如何最好的帮助请解释一下这个魔法!很高兴能帮上忙。我已经用解释更新了我的答案。请解释一下这个魔法!很高兴能帮上忙。我已经用解释更新了我的答案。