Python将整个txt文件作为1 lin读取

2024-05-03 17:19:21 发布

您现在位置:Python中文网/ 问答频道 /正文

如果我有一个txt文件,它包含如下内容:

AGCGTTGATAGTGCAGCCATTGCAAAACTTCACCCTA
AGCGTTGATAGTGCAGCCATTGCAAAACTTCACCCTA
AAGAAACGAGTATCAGTAGGATGCAGACGGTTGATTG   

但行间有“\n”。
现在如果我想用它们做三胞胎。那么有没有一种方法可以将整个txt文件作为一行来读取,这样它就不会给我:

^{pr2}$

我上传了我目前的全部代码,因为给出的答案似乎都没有帮助。
这就是我用来将整个字符串拆分为三元组的代码:

fob = open("Exercise.txt", "r")
def read_from_file(filename): 
    raw_txt = filename.read()
    triplets = [raw_txt[i:i+3] for i in range(0, len(raw_txt), 3)]
read_from_file(fob)

Tags: 文件方法代码fromtxt内容readraw
3条回答
raw_txt = ''.join(line.rstrip('\n') for line in f.readlines())

或者按照@PM 2Ring的建议:

^{pr2}$

只需阅读整个文件并删除新行:

with open('file') as f:
    text = f.read().replace('\n', '')
    triplets = [text[i:i+3] for i in range(0, len(text), 3)]

您还可以避免将整个文件读入内存,并在选择三元组时迭代地从中读取。您甚至可以通过使用生成器函数和函数组合(这使得它非常实用):

^{pr2}$

您不需要调用readlines,只需迭代文件obejct rstripping每行:

with open("test.txt") as f:
    line = "".join([line.rstrip() for line in f])

或与map组合:

^{pr2}$

rstrip还将处理行结尾是什么,不需要传递任何参数。在

如果您想要切片,只需对连接的字符串调用iter,然后压缩:

line = iter("".join(list(map(str.rstrip, f))))
for sli in zip(line, line, line):
     print("".join(sli))

如果您的数据不是3的倍数并且您不想丢失它,可以使用itertools.zip长网公司名称:

from itertools import zip_longest
with open("test.txt") as f:
    line = iter("".join(list(map(str.rstrip, f))))
    for sli in zip_longest(line,line,line, fillvalue=""):
        print("".join(sli))

在您的示例输入中,两者都将输出:

AGC
GTT
GAT
AGT
GCA
GCC
ATT
GCA
AAA
CTT
CAC
CCT
AAG
CGT
TGA
TAG
TGC
AGC
CAT
TGC
AAA
ACT
TCA
CCC
TAA
AGA
AAC
GAG
TAT
CAG
TAG
GAT
GCA
GAC
GGT
TGA
TTG

相关问题 更多 >