我的代码如下:
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文件保持空白。
答案 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:]))