繁体   English   中英

Python-将整个txt文件读取为1行

[英]Python- Reading whole txt file as 1 line

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

AGCGTTGATAGTGCAGCCATTGCAAAACTTCACCCTA
AGCGTTGATAGTGCAGCCATTGCAAAACTTCACCCTA
AAGAAACGAGTATCAGTAGGATGCAGACGGTTGATTG   

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

'CAA', 'TGC', '\nAG', 'CGT', 'TGA', 'TAG', 'TGC', 'AGC',   

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

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)
raw_txt = ''.join(line.rstrip('\n') for line in f.readlines())

或者像@PM 2Ring建议的那样:

raw_txt = ''.join(f.read().splitlines())

您不需要调用 readlines,只需遍历文件 obejct rstripping 每一行:

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

或将其与map结合使用:

with open("test.txt") as f:
    line = "".join(list(map(str.rstrip,f)))

rstrip还将处理您的行尾,无需传递任何参数。

如果您想要切片,只需在连接的字符串和 zip 上调用iter

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

如果您的数据不是 3 的倍数并且您不想丢失它,您可以使用 itertools.zip_longets:

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

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

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

您还可以避免将整个文件读入内存并在选择三元组时反复读取。 你甚至可以通过使用生成器函数和函数组合来使它变得非常懒惰(这使它非常实用):

def getCharacters (fileName):
    with open(fileName) as f:
        for line in f:
            yield from line.rstrip()

def getTriplets (source):
    it = [iter(source)] * 3
    for triplet in zip(*it):
        yield ''.join(triplet)

# and get a list of triplets
triplets = list(getTriplets(getCharacters('file'))

我不知道我是否已经解决了这个问题,但请测试我的代码。

我刚刚修改了你的代码。

正如您在一些评论中提到的,您希望在文件中间去除换行符。

因此,为此我没有剥离它,而是将 '\\n' 替换为 '',使用

rtxt = raw_txt.replace('\n', '')

这是代码:

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

三元组列表中的输出:

['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']

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM