Python:读取文件并从不同行向字典添加键和值
Python: Reading a file and adding keys and values to dictionaries from different lines
我是 Python 的新手,我在做作业时遇到了问题,基本上是这样的:
#逐行读取 WARC 文件以识别 string1。
#当找到string1时,将字符串的一部分作为键添加到字典中。
#然后继续读取文件识别string2,将string2的一部分作为值添加到之前的key中。
#继续浏览文件并做同样的事情来构建字典。
我无法导入任何东西,这给我带来了一些麻烦,尤其是添加键,然后将值留空并继续遍历文件以找到要用作值的 string2。
我开始考虑将键保存到中间变量,然后继续识别值,添加到中间变量并最终构建字典。
def main ():
###open the file
file = open("warc_file.warc", "rb")
filetxt = file.read().decode('ascii','ignore')
filedata = filetxt.split("\r\n")
dictionary = dict()
while line in filedata:
for line in filedata:
if "WARC-Type: response" in line:
break
for line in filedata:
if "WARC-Target-URI: " in line:
urlkey = line.strip("WARC-Target-URI: ")
您将密钥存储为中间值的想法很好。
我还建议使用以下代码段来遍历这些行。
with open(filename, "rb") as file:
lines = file.readlines()
for line in lines:
print(line)
要在 Python 中创建字典条目,可以使用 dict.update()
方法。
如果键已经存在,它允许您创建新键或更新值。
d = dict() # create empty dict
d.update({"key" : None}) # create entry without value
d.update({"key" : 123}) # update the value
不太清楚你要做什么,但我会尽力回答。
假设您有一个这样的 WARC 文件:
WARC-Type: response
WARC-Target-URI: http://example.example
something
WARC-IP-Address: 88.88.88.88
WARC-Type: response
WARC-Target-URI: http://example2.example2
something else
WARC-IP-Address: 99.99.99.99
然后您可以创建一个字典,将目标 URI 映射到 IP 地址,如下所示:
dictionary = dict()
with open("warc_file.warc", "rb") as file:
urlkey = None
value = None
for line in file:
if b"WARC-Target-URI: " in line:
assert urlkey is None
urlkey = line.strip(b"WARC-Target-URI: ").rstrip(b"\n").decode("ascii")
if b"WARC-IP-Address: " in line:
assert urlkey is not None
assert value is None
value = line.strip(b"WARC-IP-Address: ").rstrip(b"\n").decode("ascii")
dictionary[urlkey] = value
urlkey = None
value = None
print(dictionary)
这将打印以下结果:
{'http://example.example': '88.88.88.88', 'http://example2.example2': '99.99.99.99'}
请注意,此方法一次仅将文件的一行加载到内存中,如果文件非常大,这可能很重要。
我是 Python 的新手,我在做作业时遇到了问题,基本上是这样的:
#逐行读取 WARC 文件以识别 string1。
#当找到string1时,将字符串的一部分作为键添加到字典中。
#然后继续读取文件识别string2,将string2的一部分作为值添加到之前的key中。
#继续浏览文件并做同样的事情来构建字典。
我无法导入任何东西,这给我带来了一些麻烦,尤其是添加键,然后将值留空并继续遍历文件以找到要用作值的 string2。
我开始考虑将键保存到中间变量,然后继续识别值,添加到中间变量并最终构建字典。
def main ():
###open the file
file = open("warc_file.warc", "rb")
filetxt = file.read().decode('ascii','ignore')
filedata = filetxt.split("\r\n")
dictionary = dict()
while line in filedata:
for line in filedata:
if "WARC-Type: response" in line:
break
for line in filedata:
if "WARC-Target-URI: " in line:
urlkey = line.strip("WARC-Target-URI: ")
您将密钥存储为中间值的想法很好。
我还建议使用以下代码段来遍历这些行。
with open(filename, "rb") as file:
lines = file.readlines()
for line in lines:
print(line)
要在 Python 中创建字典条目,可以使用 dict.update()
方法。
如果键已经存在,它允许您创建新键或更新值。
d = dict() # create empty dict
d.update({"key" : None}) # create entry without value
d.update({"key" : 123}) # update the value
不太清楚你要做什么,但我会尽力回答。
假设您有一个这样的 WARC 文件:
WARC-Type: response
WARC-Target-URI: http://example.example
something
WARC-IP-Address: 88.88.88.88
WARC-Type: response
WARC-Target-URI: http://example2.example2
something else
WARC-IP-Address: 99.99.99.99
然后您可以创建一个字典,将目标 URI 映射到 IP 地址,如下所示:
dictionary = dict()
with open("warc_file.warc", "rb") as file:
urlkey = None
value = None
for line in file:
if b"WARC-Target-URI: " in line:
assert urlkey is None
urlkey = line.strip(b"WARC-Target-URI: ").rstrip(b"\n").decode("ascii")
if b"WARC-IP-Address: " in line:
assert urlkey is not None
assert value is None
value = line.strip(b"WARC-IP-Address: ").rstrip(b"\n").decode("ascii")
dictionary[urlkey] = value
urlkey = None
value = None
print(dictionary)
这将打印以下结果:
{'http://example.example': '88.88.88.88', 'http://example2.example2': '99.99.99.99'}
请注意,此方法一次仅将文件的一行加载到内存中,如果文件非常大,这可能很重要。