Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/342.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2012/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python-将整个txt文件读取为一行_Python - Fatal编程技术网

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

Python-将整个txt文件读取为一行,python,Python,如果我有一个txt文件,它包含如下内容: AGCGTTGATAGTGCAGCCATTGCAAAACTTCACCCTA AGCGTTGATAGTGCAGCCATTGCAAAACTTCACCCTA AAGAAACGAGTATCAGTAGGATGCAGACGGTTGATTG 但行与行之间有“\n”。 现在如果我想用它们做三胞胎。那么,有没有一种方法可以将整个txt文件作为一行读取,这样它就不会给我: 'CAA', 'TGC', '\nAG', 'CGT', 'TGA', 'TAG', 'TGC

如果我有一个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(f.read().splitlines())
或者按照建议:

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

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

with open('file') as f:
    text = f.read().replace('\n', '')
    triplets = [text[i:i+3] for i in range(0, len(text), 3)]
您还可以避免将整个文件读入内存,并在选择三元组时进行迭代读取。您甚至可以通过使用生成器函数和函数组合(这使它非常实用)使其变得非常懒惰:


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

with open('file') as f:
    text = f.read().replace('\n', '')
    triplets = [text[i:i+3] for i in range(0, len(text), 3)]
您还可以避免将整个文件读入内存,并在选择三元组时进行迭代读取。您甚至可以通过使用生成器函数和函数组合(这使它非常实用)使其变得非常懒惰:


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

with open("test.txt") as f:
    line = "".join([line.rstrip() for line in f])
或者将其与
地图结合使用

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

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

with open("test.txt") as f:
    line = "".join([line.rstrip() for line in f])
或者将其与
地图结合使用

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

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

我刚刚修改了你的代码

正如您在某些注释中提到的,您希望在文件中间删除换行符。

因此,我没有将其剥离,而是将“\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']

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

我刚刚修改了你的代码

正如您在某些注释中提到的,您希望在文件中间删除换行符。

因此,我没有将其剥离,而是将“\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']

每行的符号数是多少?我不太确定你要的可能是重复的。你的示例包含长度为37的行。这是故意的吗?不,我随机添加了这个,实际上每行有210个符号数?可能是重复的,我不太确定你要的是什么。你的示例包含长度为37的行。这是有意的吗?不,我随机添加了这个,实际上它有210个字符,如果你能保证文件以换行符结尾,你可以只做
'.join([line[:-1]表示f.readlines()中的行)
。OTOH,我更喜欢
'.join(f.read().splitlines())
。如果您能保证文件以换行结尾,您可以执行
'.join([line[:-1]表示f.readlines()中的行)
。OTOH,我更喜欢
'.join(f.read().splitlines())
。当然,如果你想把这些三联体解码成氨基酸,不需要建立它们的列表,你可以在getriplets(getCharacters('file'))中对三联体执行类似
的操作:
aa=codon[triplet]
,其中,
codon
是由三重态字符串索引的氨基酸组成的
dict
。你能解释一下“def getTriplets”吗?“iter”和zip(*)是什么do@Donka这是一个好主意。从iterable创建迭代器,并组合多个iterable。如果你真的不知道函数是什么,请阅读一篇教程……是的,我知道。非常感谢您的回答。这对我很有帮助,当然,如果你想把这些三胞胎解码成氨基酸,不需要建立它们的列表,你可以在getTriplets(getCharacters('file'))中为三胞胎做类似的事情:
aa=codon[triplet]
,,其中,
codon
是由三重态字符串索引的氨基酸组成的
dict
。你能解释一下“def getTriplets”吗?“iter”和zip(*)是什么do@Donka这是一个好主意。从iterable创建迭代器,并组合多个iterable。如果你真的不知道函数是什么,请阅读一篇教程……是的,我知道。非常感谢您的回答。它帮助我解决了为什么对文件对象的迭代更智能?@Basilevs,因为您没有无缘无故地在内存中保留文件的另一个副本
“”。join([line.rstrip()用于f.readline()中的line])
将在内存中保存文件的三个副本,列表comp,join和readlines调用。为什么对文件对象的迭代更智能?@Basilevs,因为您没有无缘无故地在内存中保留文件的另一个副本。
“”。join([line.rstrip()for line in f.readline()])
将在内存中生成文件的三个副本,列表comp、join和readlines调用。