我创建了一个生成许多随机密码的脚本(见下文)import stringimport secretsimport datetimenow = datetime.datetime.now()T = now.strftime('%Y_%m_d')entities = ['AA','BB','CC','DD','EE','FF','GG','HH']masterpass = ('MasterPass' + '_' + T + '.csv')f= open(masterpass,"w+")def random_secure_string(stringLength): secureStrMain = ''.join((secrets.choice(string.ascii_lowercase + string.ascii_uppercase + string.digits + ('!'+'?'+'"'+'('+')'+'$'+'%'+'@'+'#'+'/'+':'+';'+'['+']'+'#')) for i in range(stringLength))) return secureStrMaindef random_secure_string_lower(stringLength): secureStrLower = ''.join((secrets.choice(string.ascii_lowercase)) for i in range(stringLength)) return secureStrLowerdef random_secure_string_upper(stringLength): secureStrUpper = ''.join((secrets.choice(string.ascii_uppercase)) for i in range(stringLength)) return secureStrUpperdef random_secure_string_digit(stringLength): secureStrDigit = ''.join((secrets.choice(string.digits)) for i in range(stringLength)) return secureStrDigitdef random_secure_string_char(stringLength): secureStrChar = ''.join((secrets.choice('!'+'?'+'"'+'('+')'+'$'+'%'+'@'+'#'+'/'+':'+';'+'['+']'+'#')) for i in range(stringLength)) return secureStrCharfor x in entities: f.write(x + ',' + random_secure_string(6) + random_secure_string_lower(1) + random_secure_string_upper(1) + random_secure_string_digit(1) + random_secure_string_char(1) + ',' + T + "\n")f.close()我使用 pandas 来获取导入列表的代码,因此通常它适用于 200-250 个实体,而不仅仅是示例中的 8 个。这个问题经常出现,看起来好像无法读取逗号分隔符(见附图的第 6 行) 分隔符失败在我遇到的所有情况下(多次运行),看起来第 10 个字符是逗号,前面的 4 个字符(字符 6-9)如脚本中所述,但不是生成 6 个初始字符(来自 random_secure_string(6)),它正在生成 5。这会导致问题吗?如果是这样,我该如何解决?先感谢您
1 回答

汪汪一只猫
TA贡献1898条经验 获得超8个赞
胡乱猜测,因为需要确保csv 文件的内容为文本。
csv 是逗号分隔值文本文件。这意味着它是一个纯文本文件,其中的字段用分隔符分隔,通常是逗号 ( ,)。为了允许文本字段包含逗号甚至新行,可以将它们括在引号中(通常是")或者可以转义特殊字符,通常是\.
这意味着如果一行包含abcdefg\,2020_05逗号,则不会被解释为分隔符。
怎么修:
CSV 是一种简单的格式,但有很多特殊情况。规则是避免用手读或写。只需在此处使用标准库 csv 模块:
...
import csv
...
with open(masterpass,"w+", newline='') as f:
wr = csv.writer(f)
for x in entities:
wr.writerow([x, random_secure_string(6) + random_secure_string_lower(1) + random_secure_string_upper(1) + random_secure_string_digit(1) + random_secure_string_char(1), T])
将writer处理特殊字符并确保使用适当的编码或转义
添加回答
举报
0/150
提交
取消