Python:CSV 分隔符随机失败

我创建了一个生成许多随机密码的脚本(见下文)


import string

import secrets

import datetime


now = 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 secureStrMain

def random_secure_string_lower(stringLength):

    secureStrLower = ''.join((secrets.choice(string.ascii_lowercase)) for i in range(stringLength))

    return secureStrLower

def random_secure_string_upper(stringLength):

    secureStrUpper = ''.join((secrets.choice(string.ascii_uppercase)) for i in range(stringLength))

    return secureStrUpper

def random_secure_string_digit(stringLength):

    secureStrDigit = ''.join((secrets.choice(string.digits)) for i in range(stringLength))

    return secureStrDigit

def random_secure_string_char(stringLength):

    secureStrChar = ''.join((secrets.choice('!'+'?'+'"'+'('+')'+'$'+'%'+'@'+'#'+'/'+':'+';'+'['+']'+'#')) for i in range(stringLength))

    return secureStrChar


for 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。这会导致问题吗?如果是这样,我该如何解决?先感谢您


慕后森
浏览 145回答 1
1回答

汪汪一只猫

胡乱猜测,因为需要确保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处理特殊字符并确保使用适当的编码或转义
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python