随机字符串生成I/O python

随机字符串生成I/O python,python,string,random,Python,String,Random,我正在创建一个python脚本,它应该在每次生成一个新字符串时创建一个新文件(每次执行脚本时,它都会将字符串打印到文件中),并将这个随机字符串与一个文本字符串进行比较,例如:这是一个字符串,它位于另一个已创建的文件上 例如,字符串这是一个字符串位于名为file.dat的文件中,随机生成的字符串应该写入一个文件,在这种情况下,我称之为newfile.txt 但是,我有以下代码: import string import random file = open('file.dat', 'r') fi

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

例如,字符串
这是一个字符串
位于名为
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()
这段代码只需读取
文件.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!')
with open("newfile.txt", "w") as f: stored = f.readline() 
if stored == id_generator(): 
    print('success!')
现在,我的问题是,这段代码只是读取一个已经创建的文件,它是
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!')
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
回溯(最近一次呼叫最后一次):
文件“string2.py”,第20行,在
将open(“newfile.txt”,“w”)作为f:stored=f.readline()打开
IOError:文件未打开以进行读取
如何实现像第一个版本那样的功能,但将字符串与第二个版本进行比较?

解决方案您有“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!')

你必须首先打开文件当使用open调用时,你使用的是w标志,这意味着为编写而打开…参见文档..谢谢,我知道,但我想做的是,每次我运行脚本时都创建文件,所以它实际上是随机的,如果我读过它,那么它就是以前以某种方式创建的文件,所以随机代码没有任何意义,我不知道我的方法是否正确。非常感谢,但是这个文件应该创建,而不是读取,如果我读取了它,那么它就是以前创建的同一个文件,那么,我是否应该删除它并再次运行脚本?我只是想确定一下,谢谢你。但如果我删除它,那么它不是随机的。删除它并重写它将是非常随机的。谢谢你应用我的答案。:)