为什么在我的代码中放入.read()导致它不起作用?

时间:2017-02-05 08:13:32

标签: python file

我的代码如下:

input_seq = open("input.txt")
sequences = input_seq.read()
output = open("output.txt", "w")

for dna in input_seq:
    trimmed = dna[14:]
    length = len(trimmed)
    output.write(trimmed)
    print("processed sequence with length " + str(length))

我的问题是关于第二行“sequences = input_seq.read()”。当我将它包含在我的代码中时,它无法正确执行。当我删除它时,代码功能完美。

为什么.read()行导致整个事情无法正常工作。

输入

ATTCGATTATAAGCTCGATCGATCGATCGATCGATCGATCGATCGATCGATCGATC
ATTCGATTATAAGCACTGATCGATCGATCGATCGATCGATGCTATCGTCGT
ATTCGATTATAAGCATCGATCACGATCTATCGTACGTATGCATATCGATATCGATCGTAGTC
ATTCGATTATAAGCACTATCGATGATCTAGCTACGATCGTAGCTGTA
ATTCGATTATAAGCACTAGCTAGTCTCGATGCATGATCAGCTTAGCTGATGATGCTATGCA

CORRECT输出

TCGATCGATCGATCGATCGATCGATCGATCGATCGATCGATC
ACTGATCGATCGATCGATCGATCGATGCTATCGTCGT
ATCGATCACGATCTATCGTACGTATGCATATCGATATCGATCGTAGTC
ACTATCGATGATCTAGCTACGATCGTAGCTGTA
ACTAGCTAGTCTCGATGCATGATCAGCTTAGCTGATGATGCTATGCA

基本上我的目标是删除input.txt文件中所有行共有的前14个字符。

执行时没有错误消息,但实际上没有发生任何错误消息。 output.txt文件保持空白。

2 个答案:

答案 0 :(得分:1)

如评论中所述,sequences = input_seq.read()读取变量中的所有文件内容,并在此语句后input_seq指向文件末尾。
您可以使用这两个选项中的任何一个,但不能同时使用这两个选项 第一个选项

with open('input.txt') as inp_seq, open('output.txt', 'w') as output:
    for dna in input_seq:
        trimmed = dna[14:]
        output.write(trimmed)
        print("processed sequence with length " + str(len(trimmed)))

第二个选项 - 首先读取变量中的所有输入文件

with open('input.txt') as inp_seq:
    sequence = inp_seq.read()

with open('output.txt', 'w') as output:
    for dna in sequence:
        trimmed = dna[14:]
        output.write(trimmed)
        print("processed sequence with length " + str(len(trimmed)))

答案 1 :(得分:0)

使用with open() as,不要使用open()在Python中读取或写入文件。您可以搜索其他问题以了解更多相关信息。

我已经修改了你的代码并进行了测试,结果是正确的:

sequences = None
with open('input.txt', 'r') as input_file:
    sequences = input_file.readlines()

with open('output.txt', 'w') as output_file:
    for dna in sequences:
        output_file.write(dna[14:])
        print("processed sequence with length ", len(dna[14:]))