如何在txt文件中插入随机空格?
How to insert random spaces in txt file?
我在一个名为 'DNASeq.txt' 的文件中有一个包含 DNA 行的文件。我需要一个代码来读取每一行并在整行的随机位置(插入空格)拆分 each 行。每行需要在不同的地方拆分。
例如:我有:
AAACCCTHTHDAFHDSAFJANFAJDSNFADKFAFJ
我需要这样的东西:
AAA ADSF DFAFDDSAF ADF ADSF AFD AFAD
我已经试过了(!!!对 python 很陌生!!):
import random
for x in range(10):
print(random.randint(50,250))
但这会给我打印随机数。有什么方法可以像变量一样生成随机数吗?
您可以按行读取文件,在新文件中按字符写入每一行并随机插入空格:
创建不带空格的演示文件:
with open("t.txt","w") as f:
f.write("""ASDFSFDGHJEQWRJIJG
ASDFJSDGFIJ
SADFJSDFJJDSFJIDFJGIJSRGJSDJFIDJFG
SDFJGIKDSFGOROHPTLPASDMKFGDOKRAMGO""")
读取和重写演示文件:
import random
max_no_space = 9 # if max sequence length without space
no_space = 0
with open("t.txt","r") as f, open("n.txt","w") as w:
for line in f:
for c in line:
w.write(c)
if random.randint(1,6) == 1 or no_space >= max_no_space:
w.write(" ")
no_space = 0
else:
no_space += 1
with open("n.txt") as k:
print(k.read())
输出:
ASDF SFD GHJEQWRJIJG
A SDFJ SDG FIJ
SADFJSD FJ JDSFJIDFJG I JSRGJSDJ FIDJFG
空格的样式是随机的。您可以通过设置 max_no_spaces
来影响它,或者删除在 max_no_spaces
之后一直分裂的随机性
编辑:
如果您需要读取 200+ 个整块,这种一次写入 1 个字符的方式不是很经济,您可以使用相同的代码来实现,如下所示:
with open("t.txt","w") as f:
f.write("""ASDFSFDGHJEQWRJIJSADFJSDFJJDSFJIDFJGIJSRGJSDJFIDJFGG
ASDFJSDGFIJSADFJSDFJJDSFJIDFJGIJSRGJSDJFIDJFGSADFJSDFJJDSFJIDFJGIJK
SADFJSDFJJDSFJIDFJGIJSRGJSDJFIDJFGSADFJSDFJJDSFJIDFJGIJSRGJSDJFIDJF
SDFJGIKDSFGOROHPTLPASDMKFGDOKRAMGSADFJSDFJJDSFJIDFJGIJSRGJSDJFIDJFG""")
import random
min_no_space = 10
max_no_space = 20 # if max sequence length without space
no_space = 0
with open("t.txt","r") as f, open("n.txt","w") as w:
for line in f:
for c in line:
w.write(c)
if no_space > min_no_space:
if random.randint(1,6) == 1 or no_space >= max_no_space:
w.write(" ")
no_space = 0
else:
no_space += 1
with open("n.txt") as k:
print(k.read())
输出:
ASDFSFDGHJEQ WRJIJSADFJSDF JJDSFJIDFJGIJ SRGJSDJFIDJFGG
ASDFJSDGFIJSA DFJSDFJJDSFJIDF JGIJSRGJSDJFIDJ FGSADFJSDFJJ DSFJIDFJGIJK
SADFJ SDFJJDSFJIDFJG IJSRGJSDJFIDJ FGSADFJSDFJJDS FJIDFJGIJSRG JSDJFIDJF
SDFJG IKDSFGOROHPTLPASDMKFGD OKRAMGSADFJSDF JJDSFJIDFJGI JSRGJSDJFIDJFG
如果您想将 DNA 分裂固定次数(在我的示例中为 10 次),您可以尝试以下方法:
import random
DNA = 'AAACCCHTHTHDAFHDSAFJANFAJDSNFADKFAFJ'
splitted_DNA = ''
for split_idx in sorted(random.sample(range(len(DNA)), 10)):
splitted_DNA += DNA[len(splitted_DNA)-splitted_DNA.count(' ') :split_idx] + ' '
splitted_DNA += DNA[split_idx:]
print(splitted_DNA) # -> AAACCCHT HTH D AF HD SA F JANFAJDSNFA DK FAFJ
import random
with open('source', 'r') as in_file:
with open('dest', 'w') as out_file:
for line in in_file:
newLine = ''.join(map(lambda x:x+' '*random.randint(0,1), line)).strip() + '\n'
out_file.write(newLine)
既然你说是新人,那我就试着解释一下吧
为了预防起见,我正在将新序列写入另一个文件。它是
写入您正在读取的文件不安全。
with 构造函数是这样你不需要显式关闭
您打开的文件。
可以使用for循环逐行读取文件
''.join() 将列表转换为字符串。
map() 将函数应用于列表的每个元素,returns
结果作为新列表。
lambda 是您在不命名的情况下定义函数的方式。 lambda x:
2*x
喂它的数量加倍。
x + ' ' * 3 在 x 后添加 3 spaces。 random.randint(0, 1) returns
1 或 0。所以我随机选择是否在后面添加 space
每个字符与否。如果 random.randint() returns 0, 0 space 被添加.
您可以在每个字符后掷硬币是否添加 space。
此函数将字符串作为输入,将 returns 输出并在随机位置插入 space。
def insert_random_spaces(str):
from random import randint
output_string = "".join([x+randint(0,1)*" " for x in str])
return output_string
我在一个名为 'DNASeq.txt' 的文件中有一个包含 DNA 行的文件。我需要一个代码来读取每一行并在整行的随机位置(插入空格)拆分 each 行。每行需要在不同的地方拆分。
例如:我有: AAACCCTHTHDAFHDSAFJANFAJDSNFADKFAFJ 我需要这样的东西: AAA ADSF DFAFDDSAF ADF ADSF AFD AFAD
我已经试过了(!!!对 python 很陌生!!):
import random
for x in range(10):
print(random.randint(50,250))
但这会给我打印随机数。有什么方法可以像变量一样生成随机数吗?
您可以按行读取文件,在新文件中按字符写入每一行并随机插入空格:
创建不带空格的演示文件:
with open("t.txt","w") as f:
f.write("""ASDFSFDGHJEQWRJIJG
ASDFJSDGFIJ
SADFJSDFJJDSFJIDFJGIJSRGJSDJFIDJFG
SDFJGIKDSFGOROHPTLPASDMKFGDOKRAMGO""")
读取和重写演示文件:
import random
max_no_space = 9 # if max sequence length without space
no_space = 0
with open("t.txt","r") as f, open("n.txt","w") as w:
for line in f:
for c in line:
w.write(c)
if random.randint(1,6) == 1 or no_space >= max_no_space:
w.write(" ")
no_space = 0
else:
no_space += 1
with open("n.txt") as k:
print(k.read())
输出:
ASDF SFD GHJEQWRJIJG
A SDFJ SDG FIJ
SADFJSD FJ JDSFJIDFJG I JSRGJSDJ FIDJFG
空格的样式是随机的。您可以通过设置 max_no_spaces
来影响它,或者删除在 max_no_spaces
之后一直分裂的随机性
编辑:
如果您需要读取 200+ 个整块,这种一次写入 1 个字符的方式不是很经济,您可以使用相同的代码来实现,如下所示:
with open("t.txt","w") as f:
f.write("""ASDFSFDGHJEQWRJIJSADFJSDFJJDSFJIDFJGIJSRGJSDJFIDJFGG
ASDFJSDGFIJSADFJSDFJJDSFJIDFJGIJSRGJSDJFIDJFGSADFJSDFJJDSFJIDFJGIJK
SADFJSDFJJDSFJIDFJGIJSRGJSDJFIDJFGSADFJSDFJJDSFJIDFJGIJSRGJSDJFIDJF
SDFJGIKDSFGOROHPTLPASDMKFGDOKRAMGSADFJSDFJJDSFJIDFJGIJSRGJSDJFIDJFG""")
import random
min_no_space = 10
max_no_space = 20 # if max sequence length without space
no_space = 0
with open("t.txt","r") as f, open("n.txt","w") as w:
for line in f:
for c in line:
w.write(c)
if no_space > min_no_space:
if random.randint(1,6) == 1 or no_space >= max_no_space:
w.write(" ")
no_space = 0
else:
no_space += 1
with open("n.txt") as k:
print(k.read())
输出:
ASDFSFDGHJEQ WRJIJSADFJSDF JJDSFJIDFJGIJ SRGJSDJFIDJFGG
ASDFJSDGFIJSA DFJSDFJJDSFJIDF JGIJSRGJSDJFIDJ FGSADFJSDFJJ DSFJIDFJGIJK
SADFJ SDFJJDSFJIDFJG IJSRGJSDJFIDJ FGSADFJSDFJJDS FJIDFJGIJSRG JSDJFIDJF
SDFJG IKDSFGOROHPTLPASDMKFGD OKRAMGSADFJSDF JJDSFJIDFJGI JSRGJSDJFIDJFG
如果您想将 DNA 分裂固定次数(在我的示例中为 10 次),您可以尝试以下方法:
import random
DNA = 'AAACCCHTHTHDAFHDSAFJANFAJDSNFADKFAFJ'
splitted_DNA = ''
for split_idx in sorted(random.sample(range(len(DNA)), 10)):
splitted_DNA += DNA[len(splitted_DNA)-splitted_DNA.count(' ') :split_idx] + ' '
splitted_DNA += DNA[split_idx:]
print(splitted_DNA) # -> AAACCCHT HTH D AF HD SA F JANFAJDSNFA DK FAFJ
import random
with open('source', 'r') as in_file:
with open('dest', 'w') as out_file:
for line in in_file:
newLine = ''.join(map(lambda x:x+' '*random.randint(0,1), line)).strip() + '\n'
out_file.write(newLine)
既然你说是新人,那我就试着解释一下吧
为了预防起见,我正在将新序列写入另一个文件。它是 写入您正在读取的文件不安全。
with 构造函数是这样你不需要显式关闭 您打开的文件。
可以使用for循环逐行读取文件
''.join() 将列表转换为字符串。
map() 将函数应用于列表的每个元素,returns 结果作为新列表。
lambda 是您在不命名的情况下定义函数的方式。
lambda x: 2*x
喂它的数量加倍。x + ' ' * 3 在 x 后添加 3 spaces。 random.randint(0, 1) returns 1 或 0。所以我随机选择是否在后面添加 space 每个字符与否。如果 random.randint() returns 0, 0 space 被添加.
您可以在每个字符后掷硬币是否添加 space。 此函数将字符串作为输入,将 returns 输出并在随机位置插入 space。
def insert_random_spaces(str):
from random import randint
output_string = "".join([x+randint(0,1)*" " for x in str])
return output_string