Python:添加具有相同值的列

时间:2016-04-01 18:28:22

标签: python list csv for-loop

我有一个包含3列的制表符分隔文件。我想添加一个相同数字1的新第一列。

inputfile是

a 3 6
b 3 5
c 3 5 
d 8 4 

这就是我想要的输出文件:

1 a 3 6
1 b 3 5
1 c 3 5
1 d 8 4

这是我到目前为止所做的:

#!/usr/bin/env python
import sys
import csv  
f=open('inputfile.txt', 'r+')
t=[]
for line in f.readlines():
    t.append('\n')
    t.append(1)
    f.writelines(t)

然而,我收到一个错误: Traceback(最近一次调用最后一次):   文件" ./ py.py",第6行,in     sys.stdout(' inputfile.txt',' w') TypeError:' file'对象不可调用

4 个答案:

答案 0 :(得分:2)

只需打开这两个文件并写入即可,将1和标签\t连接到正在运行的列表中的每一行。然后将列表输出到新文件:

f1 = "Input.txt"
f2 = "Output.txt"

t = []
with open(f1, 'r') as txt1:
    for rline in txt1:       
        t.append("1\t" + rline)

with open(f2, 'w') as txt2:
    for i in t:
        txt2.write(i)

#1  a   3   6
#1  b   3   5
#1  c   3   5
#1  d   8   4

或者,为了避免使用列表(但需要附加到'a'的文件):

with open(f1, 'r') as txt1:
    for rline in txt1:       
        rline = "1\t" + rline

        with open(f2, 'a') as txt2:
            txt2.write(rline)

@JonClements甚至进一步建议避免每行打开/关闭文件的开销:

with open(f1) as txt1, open(f2, 'w') as txt2:
        txt2.writelines('1\t' + line for line in txt1) 

答案 1 :(得分:1)

您不需要sys模块来解决问题:

#!/usr/bin/env python
output_file = open('output.txt', 'w')
input_file = open('input.txt', 'r+')
for line in input_file.readlines():
    line = line.split(" ")
    line.insert(1, str(1))
    line = (" ").join(line)
    output_file.write(line)

input_file.close()    
output_file.clsoe()

cat output.txt给出输出:

a 1 3 6
b 1 3 5
c 1 3 5
d 1 8 4

答案 2 :(得分:0)

如果您不想要其他任何内容,可以跳过csv模块并在文件中添加每行,如下所示:

open('out.txt', 'w').writelines(["1\t" + line for line in open("in.txt")])

答案 3 :(得分:0)

这将准确显示您所需的输出显示的内容:

fin = open('inputfile.txt', 'r+')
fout = open('outputfile.txt', 'w')
t=[]

for line in fin.readlines():
    t.append('1 ' + line)

fout.writelines(t)