用Python解析文本文件和split()

2 投票
1 回答
1708 浏览
提问于 2025-04-18 01:57

我相信这个问题应该有个简单的解决办法,只是我还没找到最好的方法。

我有一个文本文件,里面包含了用户名和密码。下面是一个例子:

mcgoga12,password
shelby12,password1

我想打开这个文件,并读取里面的内容。不过,我想把用户名(比如 mcgoga12)和密码(比如 password)分别存储在两个不同的列表里。

有没有人能给我一些具体的建议,告诉我该怎么解析这些内容?

这是我尝试过的:

with open("credentials.txt", "r") as infile:
    users = infile.read().rsplit(',',3)
    print users

但是,我总是得到这样的输出(显然它没有把内容分开)

['mcgoga12', 'password\nshelby12', 'password1\n']

1 个回答

2

文件里有一些换行符,这些需要用 strip 系列的函数来明确去掉。我们用 rstrip 来去掉行尾的空白,然后根据 , 来分割 line,这样就能得到一个包含用户名和对应密码的列表。我们对所有的行都这样处理,最后用 zip 函数来转换 data,像这样:

with open("credentials.txt", "r") as infile:
    data = [line.rstrip().split(",") for line in infile]
    usernames, passwords = zip(*data)
    print usernames, passwords
    # ('mcgoga12', 'shelby12') ('password', 'password1')

如果我们只是打印 data,它看起来会像这样:

[['mcgoga12', 'password'], ['shelby12', 'password1']]

而当我们用 zip 和解包的方式处理时,它会变成:

('mcgoga12', 'shelby12') ('password', 'password1')

这里说的“用解包进行压缩”,意思是我们把序列里的内容作为参数传给函数。比如说:

zip(*data)

其实就是一种简写方式,等同于:

zip(data[0], data[1]...)

撰写回答