如何从第四个选项卡开始到行尾的行中删除文本?

时间:2012-06-27 14:07:15

标签: python parsing tabs

我刚刚开始编程,因此我有点像菜鸟。

我正在尝试使用python从.txt表中删除列。所有列都由制表符分隔。 这是一个示例行:

100226.SCO0401  1   440 COG0001 glutamate-1-semialdehyde 2,1-aminomutase

我想删除第四个标签后的行中的所有文本(“谷氨酸-1-半醛2,1-氨基变位酶”部分)。

我见过一些人导入csv来解决这个问题,但我想的是一些简单的事情:

def remove(infilename, outfilename):
    # Open original file and output file
    infile = open(infilename, 'rt')
    outfile = open(outfilename, 'wt')

    # Read lines and remove annotation
    for line in infile:
        outfile.write(line['**everything-until-the-fourth-tab**']

    # Close files
    infile.close()
    outfile.close()

大胆的部分是我现在的问题。有什么建议? 提前谢谢。

2 个答案:

答案 0 :(得分:2)

使用.split('\t')将行中的条目拆分为数组。然后,您可以使用[:4]对数组进行切片,仅保留前4个元素。最后,再次使用'\t'.join

重新加入
for line in infile:
     columns = line.split('\t')
     columns = columns[:4]
     outfile.write('\t'.join(columns))

作为一个单行:

for line in infile:
     outfile.write('\t'.join(line.split('\t')[:4]))

答案 1 :(得分:0)

我提交使用csv模块可能是最简单的解决方案:

with open(infilename, 'rb') as infile, open(outfilename, 'wb') as outfile:
    writer = csv.writer(outfile, delimiter='\t')
    for row in csv.reader(infile, delimiter='\t'):
        writer.writerow(row[:4])