无论如何,我一直在尝试读取和写入Python 3.3.3中的文本文件,但它一直没有用。我的代码如下:
import math
pFile=open('/Users/Username/Desktop/Programming:Design/Program Access Files/primes.txt')
pList=[]
for line in pFile:
pList=pList+(int(line.strip()))
def testPrime(num,pList):
if num<=1:
return False
testList=[]
place=0
sqrt=math.sqrt(num)-((math.sqrt(num))%1)
p=pList[place]
while p<=sqrt:
testList.append(p)
place=place+1
p=pList[place]
for i in testList:
if i%num==0:
return False
return True
print('Hello and Welcome to the Prime Finder 000!')
end=int(input('What integer would you like me to go to today?'))
for j in range(pList[-1],end+1):
if testPrime(j,pList)==True:
pList.append(j)
print(j)
pFile.close()
pFile=open('/Users/Username/Desktop/Programming:Design/Program Access Files/primes.txt','w')
for k in pList:
pFile.write(str(k))
pFile.write('\r\n')
pFile.close()
该程序应该搜索所有正整数以查找素数。我试图存储的文本文件是'primes.txt',在我尝试打开它时显示的目录中。但是,我的阅读文件的方法肯定是错的,即:
pFile=open('/Users/Username/Desktop/Programming:Design/Program Access Files/primes.txt')
pList=[]
for line in pFile:
pList=pList+(int(line.strip()))
我确信我的查找素数的功能有效,但它们没有正确存储。目前,该程序所做的是擦除文本文件'primes.txt'并打印出每个数字从2到用户输入的数字作为素数,按照我还没有找到的顺序。
答案 0 :(得分:1)
Ya,正如@ maurelio79和@DSM所说,看起来你正在读取和写入同一个文件,你要添加一个int到列表......这应该是不可能的。此外,使用with打开文件更简洁:
pList = []
with open(fle_path, 'r') as fle:
for line in fle:
pList.append(int(line.rstrip("\n")))
#find and append new primes to pList using pList.append(<new prime>)
with open(fle_path, 'a') as fle:
for item in pList:
fle.write(str(item)+"\n")
使用'r'读取文件,'w'每次使用空白文件启动a,使用'a'附加到现有文件。您可以使用相同的文件,但使用'a'参数附加新找到的素数。
使用with语句会在循环存在时自动关闭文件。
答案 1 :(得分:0)
我(大致)重写了你的例子,向你展示什么是更好的习语。
首先,你的主要发现者可能很棒,因为我使用了一个基于测试的单个数字:
def isprime(n):
'''check if integer n is a prime'''
# make sure n is a positive integer
n = abs(int(n))
# 0 and 1 are not primes
if n < 2:
return False
# 2 is the only even prime number
if n == 2:
return True
# all other even numbers are not primes
if not n & 1:
return False
# range starts with 3 and only needs to go up the squareroot of n
# for all odd numbers
for x in range(3, int(n**0.5)+1, 2):
if n % x == 0:
return False
return True
接下来,我不知道你的源文件中有什么。在这里,我向您提出了“多远”的相同问题,然后展示了阅读和编写该文件的更好方法:
print('Hello and Welcome to the Prime Finder 000!')
end=int(input('What integer would you like me to go to today?'))
with open('/tmp/nums.txt', 'w') as fout:
for n in range(1,end+1):
fout.write('{}\n'.format(n))
最后,读取整数2-end
中的文件并依次测试每个文件的素数。将素数写入新文件prime.txt
:
with open('/tmp/nums.txt') as f, open('/tmp/primes.txt', 'w') as fout:
for n in f:
n=int(n)
if isprime(n):
print(n)
fout.write('{}\n'.format(n))
如果您希望拥有素数列表,请按以下方式添加到列表中:
primes=[]
with open('/tmp/nums.txt') as f:
for n in f:
n=int(n)
if isprime(n):
print(n)
primes.append(n)
有几点需要注意:
int(line.strip())
。 int
首先删除空格,以便int('12\r\n')
正常工作pList+(int(line.strip()))
可能是TypeError
,因为您无法将int连接到列表。请改用pList.append(int(line))
。