用Python解析文本文件和split()
我相信这个问题应该有个简单的解决办法,只是我还没找到最好的方法。
我有一个文本文件,里面包含了用户名和密码。下面是一个例子:
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]...)