我想生成从文件中读取的服务器地址和凭据列表,作为从文件中的换行符拆分的单个列表。
文件采用这种格式
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的新手,如何通过换行符分割并创建单个列表。提前谢谢你
答案 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'))