[英]I need to import data from a text file as a list in Python 3 and have the program run a function for each item
[英]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@
我假设站点名称是唯一的。 如果不是,请改用list
的defaultdict
,如下所示:
d = defaultdict(list)
在为网站添加密码时,而不是
d[site_name] = password
做
d[site_name].append(password)
使用defaultdict
,您无需检查密钥是否已存在。 考虑边缘情况,例如:
在您的站点名称中。 我还假设文件中的行成对工作,偶数索引处的一行是站点名称,每个偶数索引的 +1 处的一行是站点的密码。
如果事情变得比这更复杂,那么事先进行一些文件清理或正则表达式可能会派上用场!
祝你好运
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.