write()创建空文件

时间:2015-02-06 01:31:29

标签: python python-3.x file-io

我想写一个文件,但如果我打开open(file,"w")它输出一个空白文件,它确实可以与open(file,"a")一起使用,但我不想追加,因为它真的非常快我只需要更新文件。

这是代码:

p1 = open("C:\\Users\\JoãoPedro\\Documents\\Python\\PrimeFactoring\\primes1.txt","r")
Prime_list = p1.read()
Prime_list = Prime_list.split()
p1.close()

L_List = len(Prime_list)
i = 29420
x = [Here goes a really large number]
while (i <= L_List):
   Primorial_List = open("Primorial.txt","w")
   Primorial_List.write("%d :: %s :: %d \n"%(i,Prime_list[i],x))
   Primorial_List.close()
   print(str(i) + " :: " + Prime_list[i])

   i += 1
   x = x * int(Prime_list[i])

print("Finished")

在代码上缩进是正确的,但我不知道为什么我不能在这里缩进代码:/

我注意到的一件事是,如果我这样做,我就不会以管理员的身份运行闲置?

3 个答案:

答案 0 :(得分:0)

而不是:

while (i <= L_List):
   Primorial_List = open("Primorial.txt","w")
   Primorial_List.write("%d :: %s :: %d \n"%(i,Prime_list[i],x))
   Primorial_List.close()
   print(str(i) + " :: " + Prime_list[i])

   i += 1
   x = x * int(Prime_list[i])

如果您执行以下操作会发生什么:

for i in range(MAGIC_NUMBER, len(L_List)+1):
    print(str(i) + " :: " + Prime_list[i])
    x *= int(Prime_list[i])
with open("Primorial.txt", "w") as Primorial_List:
    l = len(L_List)
    Primorial_List.write("%d :: %s :: %d \n"%(l,Prime_list[l],x))

正如@Barmar所提到的那样 - 你现在的方式是每次都覆盖文件(如你所愿),正如@John Zwinck所提到的那样,非常浪费 - 只要保留在Python中就可以了你可以(做你所有的计算),只有当你在列表的最后,写下它,只需一次。

答案 1 :(得分:0)

Primorial_List = open("Primorial.txt","w")
while (i <= L_List):
    Primorial_List.write("%d :: %s :: %d \n"%(i,Prime_list[i],x))
    Primorial_List.close()
    print(str(i) + " :: " + Prime_list[i])
    i += 1
    x = x * int(Prime_list[i])
Primorial_List.close()

重新格式化代码以在循环之前打开文件并在完成时关闭它使其工作并创建包含数据的文件。

答案 2 :(得分:0)

由于这些

,您的代码应该在结束时确定您的IndexError
i += 1
x = x * int(Prime_list[i])

更不用说有一个

while (i <= L_List):

这将允许再次使用Primorial_List.write导致IndexError的迭代。如果你的代码运行正常,你应该检查任何尝试...除了用于调用这段代码。在那里,您可能会找到清空文件的原因。在某个地方,你可能只是打开文件并在这段代码后关闭文件?或者类似这样的逻辑等价物可能是原因:

while (i <= L_List):

    Primorial_List = open("Primorial.txt","w")
    try:
        Primorial_List.write("%d :: %s :: %d \n"%(i,Prime_list[i],x))
    except:
        pass
    Primorial_List.close()

或类似的东西:

try:
    while (i <= L_List):
        Primorial_List = open("Primorial.txt","w")
        Primorial_List.write("%d :: %s :: %d \n"%(i,Prime_list[i],x))
        Primorial_List.close()
except:
    pass

这意味着代码将从Primorial_List.write方法移动到除了因为Prime_list [i]而导致最后一次迭代的IndexError。

如果没有尝试...除了块,那么我会假设您已经将x + x * Prime_list [i]旁边的i + = 1语句推送,这也将使文件为空但以一个结尾尽管如此,IndexError仍然存在。

在旁注上,正如其他人所提到的,你应该打开文件一次并写一次而不是连续写。更好的是,利用Python的with语句进行文件操作。以下可能是等效的: - )

with open("C:\\Users\\JoãoPedro\\Documents\\Python\\PrimeFactoring\\primes1.txt") as fo:
    Prime_list = fo.read()

Prime_list = Prime_list.split()
L_List = len(Prime_list)
i = 29420
x = [Here goes a really large number]

new_file_content = ""
while (i < L_List):
   new_file_content += "%d :: %s :: %d \n"%(i,Prime_list[i],x)
   print(str(i) + " :: " + Prime_list[i])
   x = x * int(Prime_list[i])
   i += 1

with open("Primorial.txt", "w") as fo:
    fo.write(new_file_content)

print("Finished")