我需要程序读取两个文本文件的每一行并将每一行放在一起。 它有效,但唯一的问题是输出\ n而不是换行。
代码:
def user1():
file=open('password.txt')
passwords=file.readlines()
g=[]
for i in passwords:
i.strip('\n')
g.append(str(i))
rfile=open('user.txt')
users=rfile.readlines()
r=[]
for i in users:
i.strip('\n')
r.append(str(i))
dictionaries=dict(zip(users,passwords))
print(dictionaries)
user1()
所以不要看起来像:
'ted123':'dd322'
'jnm443': 'dfvd3453'
看起来像这样:
'ted123\n': 'dd322\n', 'jnm443\n': 'dfvd3453\n'
答案 0 :(得分:0)
def get_data(filename):
with open(filename, 'r') as fh:
for line in fh.readlines():
yield line.strip()
result = dict(zip(get_data('user.txt'), get_data('password.txt')))
答案 1 :(得分:0)
问题是首先剥离线条并丢弃剥离的值。字符串是不可变的,这意味着它们无法更改。
所以
i.strip('\n')
没用。应将其分配给变量。
i2 = i.strip('\n')
此外,您没有使用在zip
函数调用中构建的列表,而是在压缩文件行。这些仍然有换行符。
更改了代码。
def user1():
file = open('password.txt')
passwords = file.readlines()
g=[]
for i in passwords:
g.append(i.strip('\n'))
rfile = open('user.txt')
users = rfile.readlines()
r = []
for i in users:
r.append(i.strip('\n'))
dictionaries = dict(zip(g, r))
print(dictionaries)
user1()
关键是,我们将已剥离的字符串存储在列表中
r.append(i.strip('\n'))
并使用zip
dictionaries = dict(zip(g, r))
您还应该注意到您尚未关闭文件。要使用with
,而不是稍后手动调用。这是一个例外更安全,在介入的代码中意味着没有调用close。就此而言,就此而言。
with open('password.txt') as file:
passwords = file.readlines()
请注意,文件的生命周期由with
的范围控制,该块中的任何代码都可以访问打开的文件。在块之后它被关闭。
如果您希望将每个条目打印在单独的行上,请不要尝试依赖文件中已有的换行符。迭代dict
并在新行上打印每个条目。
for name, pwd in dictionaries.items():
print('{}: {}'.format(name, pwd))
当然,您可以用更少的代码来表达这一点,而无需将行复制到中间列表。
with open('user.txt') as fuser, open('password.txt') as fpass:
def stripped(f):
return map(str.strip, f)
d = dict(zip(stripped(fuser), stripped(fpass)))
for name, pwd in d.items():
print('{}: {}'.format(name, pwd))