通过从文件中读取生成列表

时间:2017-02-07 04:07:36

标签: python python-3.x

我想生成从文件中读取的服务器地址和凭据列表,作为从文件中的换行符拆分的单个列表。

文件采用这种格式

login:username
pass:password
destPath:/directory/subdir/
ip:10.95.64.211
ip:10.95.64.215
ip:10.95.64.212
ip:10.95.64.219
ip:10.95.64.213

我希望以这种方式输出

[['login:username', 'pass:password', 'destPath:/directory/subdirectory', 'ip:10.95.64.211;ip:10.95.64.215;ip:10.95.64.212;ip:10.95.64.219;ip:10.95.64.213']]

我试过这个

with open('file') as f:
credentials = [x.strip().split('\n') for x in f.readlines()]

并返回列表

中的列表
[['login:username'], ['pass:password'], ['destPath:/directory/subdir/'], ['ip:10.95.64.211'], ['ip:10.95.64.215'], ['ip:10.95.64.212'], ['ip:10.95.64.219'], ['ip:10.95.64.213']]

我是python的新手,如何通过换行符分割并创建单个列表。提前谢谢你

3 个答案:

答案 0 :(得分:2)

你可以这样做

with open('servers.dat') as f:
    L = [[line.strip() for line in f]]
print(L)

输出

[['login:username', 'pass:password', 'destPath:/directory/subdir/', 'ip:10.95.64.211', 'ip:10.95.64.215', 'ip:10.95.64.212', 'ip:10.95.64.219', 'ip:10.95.64.213']]

只需使用列表推导来读取行。当常规文件迭代器逐行读取时,您不需要在\n上拆分。双重列表有点不同寻常,只要你决定不需要它就移除外部[]

我刚注意到你想要在一个字符串中加入的ip地址列表。它在问题的屏幕上并不清楚,你不会尝试在自己的代码中进行。

要做到这一点,请先使用next分别阅读前三行,然后使用join作为分隔符,只剩余;其余行。

def reader(f):
    yield next(f)
    yield next(f)
    yield next(f)
    yield ';'.join(ip.strip() for ip in f)

with open('servers.dat') as f:
    L2 = [[line.strip() for line in reader(f)]]

输出为

[['login:username', 'pass:password', 'destPath:/directory/subdir/', 'ip:10.95.64.211;ip:10.95.64.215;ip:10.95.64.212;ip:10.95.64.219;ip:10.95.64.213']]

它与您的预期输出不完全匹配,因为数据中存在拼写错误'destPath:/directory/subdirectory'而不是'destPath:/directory/subdir'

答案 1 :(得分:0)

这应该有效

arr = []
with open('file') as f:
    for line in f:
        arr.append(line)
return [arr]

答案 2 :(得分:0)

您可以将文件视为列表,并使用for循环遍历它:

arr = []
with open('file', 'r') as f:
    for line in f:
        arr.append(line.strip('\n'))