输出\ n而不是创建新行

时间:2018-04-30 00:30:08

标签: python python-3.x

我需要程序读取两个文本文件的每一行并将每一行放在一起。 它有效,但唯一的问题是输出\ 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'

2 个答案:

答案 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))