如何在txt文件中插入随机空格?

时间:2018-11-13 20:20:13

标签: python python-3.x insert spaces

我在一个名为'DNASeq.txt'的文件中有一个带有DNA行的文件。我需要一个代码来读取每一行并在每行的随机位置(插入空格)拆分每条行。每行都需要在不同位置分割。

EX:我有:  AAACCCHTHTHDAFHDSAFJANFAJDSNFADKFAFJ     我需要这样的东西:  AAA ADSF DFAFDDSAF ADF ADSF AFD AFAD

我尝试过(!!!!!!)

import random

for x in range(10):
  print(random.randint(50,250))

但是会打印出随机数。有什么方法可以像变量一样生成随机数?

4 个答案:

答案 0 :(得分:0)

您可以逐行读取文件,将每行按字符写入新文件并随机插入空格:

创建没有空格的演示文件:

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多个en块,则一次写入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

答案 1 :(得分:0)

如果您想分割固定的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

答案 2 :(得分:0)

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()将函数应用于列表的每个元素,并返回 结果作为新列表。

  • lambda是如何在不命名的情况下定义函数的。 lambda x: 2*x使您输入的数字翻倍。

  • x +''* 3在x后面加3个空格。 random.randint(0,1)返回 1或0。所以我随机选择是否在后面添加空格 是否每个字符。如果random.randint()返回0,则添加0个空格。

答案 3 :(得分:0)

您可以在每个字符后面扔一个硬币,无论是否在其中添加空格。 此函数将字符串作为输入,并返回输出,并在随机位置插入空格。

def insert_random_spaces(str):
    from random import randint
    output_string = "".join([x+randint(0,1)*" " for x in str])
    return output_string