【问题标题】:Random string generation I/O python随机字符串生成 I/O python
【发布时间】:2016-10-31 02:10:39
【问题描述】:

我正在创建一个 python 脚本,它应该在每次生成新字符串时创建一个新文件(每次执行脚本时它都会将字符串打印到文件中),并将这个随机字符串与一个字符串进行比较文本如:THIS IS A STRING,位于另一个已创建的文件中。

例如,字符串THIS IS A STRING位于名为file.dat的文件中,应将随机生成的字符串写入文件,在这种情况下我称之为newfile.txt

但是,我有这个代码:

import string
import random

file = open('file.dat', 'r')
file=file.read()
print file

def id_generator(size=28, chars=string.ascii_uppercase + string.digits):
    return ''.join(random.choice(chars) for _ in range(size))
file = open("newfile.txt", "w")
file.write(id_generator())
file.close()

此代码只是读取file.dat 存档,将其打印到控制台,然后生成一个随机字符串并将其存储在一个名为newfile.txt 的文件中,但它不会比较任何内容,因此,为了实现这一点,我'我修改了这样的代码:

import string
import random

file = open('bullshit.dat', 'r')
file=file.read()
print file

def id_generator(size=28, chars=string.ascii_uppercase + string.digits):
    return ''.join(random.choice(chars) for _ in range(size))
with open("newfile.txt", "r") as f: stored = f.readline() 
if stored == id_generator(): 
    print('success!')

现在,我的问题是,这段代码只是读取了一个已经创建的文件,即newfile.txt,我需要像之前的代码一样创建一个新文件,但是比较字符串。

我尝试像这样修改最后三行:

with open("newfile.txt", "w") as f: stored = f.readline() 
if stored == id_generator(): 
    print('success!')

但它把我扔了:

Traceback (most recent call last):
File "string2.py", line 20, in <module>
with open("newfile.txt", "w") as f: stored = f.readline() 
IOError: File not open for reading

我怎样才能完成类似于第一个版本的操作,但将字符串与第二个版本进行比较?

【问题讨论】:

  • 你必须先打开文件
  • 在使用 open 调用时,您使用的是 w 标志,这意味着可以写入...参见文档 ..docs.python.org/2/library/functions.html#open
  • 谢谢,我知道,但我想做的是每次运行脚本时都创建文件,这样它实际上可以是随机的,如果我阅读它,那么它就是一个文件以前以某种方式创建的,所以随机代码没有任何意义,但我不知道我的方法是否正确。

标签: python string random


【解决方案1】:

解决方案你有“w”,它只能写入文件,所以你必须以“r”打开它来读取它。

import string
import random

file = open('test.dat', 'r')
file=file.read()
print file

def id_generator(size=28, chars=string.ascii_uppercase + string.digits):
    return ''.join(random.choice(chars) for _ in range(size))
with open("newfile.txt", "r") as f: stored = f.readline()
if stored == id_generator():
    print('success!')

【讨论】:

  • 非常感谢,但是这个文件应该是创建的,而不是读取的,如果我读取它,那么它就是之前创建的同一个文件,所以我应该删除它并再次运行脚本吗?只是为了确定,谢谢你。但是,如果我删除,那么它不是随机的。
  • 删除它并重写它是非常随机的。
  • 感谢您采纳我的回答。 :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-08-01
  • 2011-06-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多