为了账号安全,请及时绑定邮箱和手机立即绑定

Python:CSV 分隔符随机失败

Python:CSV 分隔符随机失败

慕后森 2022-11-29 17:15:01
我创建了一个生成许多随机密码的脚本(见下文)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处理特殊字符并确保使用适当的编码或转义


查看完整回答
反对 回复 2022-11-29
  • 1 回答
  • 0 关注
  • 144 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号