Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何从一个txt文件中获取值并附加到另一个txt文件中?_Python_Linux_Csv - Fatal编程技术网

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

Python 如何从一个txt文件中获取值并附加到另一个txt文件中?,python,linux,csv,Python,Linux,Csv,我有两个文本文件。“A.txt”包含 “B.txt”与“A.txt”类似,只是最后两列与“A.txt”不同。另一个区别是“B.txt”包含一些不在“A.txt”中的附加行。例如,第三行a3qew。。。5 23 34 5在“B.txt”中,但不在“A.txt”中 我想做的是提取“A.txt”每一行中最后一列的值,并将其附加到“B.txt”中相应的行中。对于“B.txt”中不在“A.txt”中的每一行,如果第三列元素以字母“Q”(例如,QEW)开头,我希望附加值1,否则附加值2。所以输出应该是 A

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

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

我想做的是提取“A.txt”每一行中最后一列的值,并将其附加到“B.txt”中相应的行中。对于“B.txt”中不在“A.txt”中的每一行,如果第三列元素以字母“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
脚本应该做你想要的事情:

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
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
对于第一个文件为true,对于所有其他文件为false,因此在第一部分中,我们只填充一个数组,在这种情况下称为
arr
。它由第3个字段的键填充,并具有第11个字段的值。如果第二个文件中的匹配与前三个字段匹配,则可以将
$3
替换为
$1$2$3
(另请参见我在您问题下的评论)


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

提示:
awk
更适合这种类型的东西。您如何确定两行是否“相同”?
a3we…
a4we…
是否“相同”?不,它们不“相同”,因为3与4不同。我编辑了这个问题,希望它现在更清楚。当我尝试的时候,我看到了输出
19.31 AB。。。1 5 4 9
第一行,当它应该是
A 1 AB。。。1 5 4 9 4.5
。我不知道那19.3是从哪里来的。而且它缺少
A.txt
中的
4.5
值。另外,如何将输出保存在txt文件中?我无法复制您的输出。您可以通过添加
>file.out
将其保存到文本文件中。好的,我将
$3
替换为
$1$2$3
,使其工作得更好。但是,每行似乎都有一个
\n
。例如,在将
19.3
附加到第一行之前,它跳过一行。我只希望在第一行中的
9
19.3
之间有一个空格,后面的每一行也一样
awk -f script.awk f1 f2