【问题标题】:Only last line written appears in output file [duplicate]只有写入的最后一行出现在输出文件中[重复]
【发布时间】:2021-02-19 09:26:53
【问题描述】:

我知道很多人问这个问题,但我尝试了很多方法,但没有一个对我有用。

我正在使用 python 编写随机字符串生成器,但是当我将它保存到文本文件时,它只包含最后一行。

但在命令行中它会打印所有行。

这是我的代码。

import sys
import random

    
ch = 'ZXCVBNM<>?":LKJHGFDSAQWERTYUIOP{}|+_)(*&^%$#@!~zxcvbnm,./;lkjhgfdsapoiuytrewq`1234567890'

nop = input('How Many password do you want to create?')
nop = int(nop)

lop = input('Whats the length of passwords?')
lop = int(lop)

for p in range (nop):
    password = ''
    for l in range(lop):
       password += random.choice(ch)
    print(password)
    pwd = open("pwd.txt", "w")
    pwd.write(password)
    pwd.close()

【问题讨论】:

  • w 模式打开文件会擦除现有内容。而你在循环中这样做,所以每次通过循环,它都会删除所有以前的内容。将open() 移到循环之前,将close() 移到之后。
  • 以写入模式打开文件会覆盖其数据。将行 pwd = open("pwd.txt", "w") 移到嵌套循环之外,并仅在完成后关闭文件。
  • 另外,您可能希望在每个密码后写一个换行符,否则所有密码将合并在一行中。

标签: python python-3.x


【解决方案1】:

因为您正在打开文件以写入每个密码。将您的open() 放在for p in range(nop) 之前,并在该循环完成后放置您的close()。 (缩进它。)

【讨论】:

    【解决方案2】:

    您正在打印密码作为 for 循环的一部分,因此文件的每一行都会被重写。

    你可能想要这个

    for p in range (nop):
       password = ''
       for l in range(lop):
          password += random.choice(ch)
    print(password)
    pwd = open("pwd.txt", "w")
    pwd.write(password)
    pwd.close()
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-10-28
      • 2016-10-11
      • 1970-01-01
      • 2011-07-06
      • 1970-01-01
      • 2021-06-23
      相关资源
      最近更新 更多