繁体   English   中英

有没有办法将文本文件导入python中的列表,并使每个字符在该列表中成为一个单独的项目?

[英]Is there a way to import a text file into a list in python, and have each character a separate item within that list?

我有一个包含此信息的文本文件:

Site Name: Alphabet
Password: $1xKjE&a
Site Name: Chicken Nugget
Password: 6o!XkL7sm~6296*&
Site Name: Elliot
Password: 5*2uIM#@V6E@

(更多信息可附加,但这是当前用于测试的文件中的内容) - 我想保存在文本文件中的信息是网站名称和该网站的密码,这是由我正在工作的程序随机生成的在。 我想为此添加一种加密形式以使其更安全。

但是,我希望这样我可以将所有这些信息导入 python 中的列表中,在该列表中的单独项目中,以便我可以创建一种密码。 任何帮助表示赞赏。

您可以open()文件然后read()它 - 这将为您提供文件内容作为字符串。 然后您可以遍历字符串以获取每个字符。

with open('your_file.txt') as f:
    for c in f.read():
        # do something with c
        print(c)

结果:

S
i
t
e

N
a
m
e
:
...

请记住,您将在迭代时获得换行符\\n字符 - 您也应该处理它们。

PS:不要尝试推出自己的加密货币 - 使用库。 滚动您自己的加密货币仅适用于学习目的。

这样的事情怎么样?

with open('scratch.txt', 'r') as f:
    file_lines = f.readlines()


websites = []
passwords = []

for line in file_lines:
    line_tokens = list(line.split(': ')[1].strip())
    if 'Site Name' in line:
        websites.append(line_tokens)
    else:
        passwords.append(line_tokens)

print 'websites'
[['A', 'l', 'p', 'h', 'a', 'b', 'e', 't'], 
 ['C', 'h', 'i', 'c', 'k', 'e', 'n', ' ', 'N', 'u', 'g', 'g', 'e', 't'], 
 ['E', 'l', 'l', 'i', 'o', 't']
]


print 'passwords'
[['$', '1', 'x', 'K', 'j', 'E', '&', 'a'], 
 ['6', 'o', '!', 'X', 'k', 'L', '7', 's', 'm', '~', '6', '2', '9', '6', '*', '&'], 
 ['5', '*', '2', 'u', 'I', 'M', '#', '@', 'V', '6', 'E', '@']
]

我们基本上遍历文件的每一行并将密码或网站扔到相应的列表中。 然后,您可以根据需要操作每个嵌套列表的字符。 这是基本思想,但您可以从这里构建并根据需要调整代码以存储字符。

如果您的文件很大,您最好一次读取一个块:

#!/usr/local/cpython-3.8/bin/python3

list_ = []
with open('/etc/passwd') as file_:
    while True:
        block = file_.read(4096)
        if not block:
            break
        list_.extend(block)

print(list_)

如果我理解正确,您想存储站点名称/密码对。

from collections import defaultdict

d = defaultdict(str)  # dictionary of str -> str
with open("so_passwords_test.txt", "r") as in_file:
    lines = [e.strip() for e in in_file.readlines()]  # get each line, removing trailing white characters
    total_len = len(lines)
    i = 0
    while i < total_len - 1: # from 0 to 5, so that we stop at the last site name, and can get the password at i+1
        site_name    = lines[i].split(":", 1)[1]   # get site name, splitting on first ':', in case there's one in the site name
        password     = lines[i+1].split(":", 1)[1] # get password for this site name on 1st ':', in case there's one in the pwd
        d[site_name] = password                    # adding a key/value pair to d (site name, password)
        i += 2                                     # moving 2 positions, since 2 were used for site name + pwd

for k, v in d.items():
    print(k, " -- ", v)

输出(打印只是为了向您展示,但结果在一个字典中,您可以迭代或查看/搜索每个键):

Alphabet  --   $1xKjE&a
Chicken Nugget  --   6o!XkL7sm~6296*&
Elliot  --   5*2uIM#@V6E@

我假设站点名称是唯一的。 如果不是,请改用listdefaultdict ,如下所示:

d = defaultdict(list)

在为网站添加密码时,而不是

d[site_name] = password

d[site_name].append(password)

使用defaultdict ,您无需检查密钥是否已存在。 考虑边缘情况,例如:在您的站点名称中。 我还假设文件中的行成对工作,偶数索引处的一行是站点名称,每个偶数索引的 +1 处的一行是站点的密码。

如果事情变得比这更复杂,那么事先进行一些文件清理或正则表达式可能会派上用场!

祝你好运

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM