从特殊格式的文本文件中读取数据
问题内容:
我使用的是Ashwini Chaudhary所建议的这种方法,用于将数据从特定格式的文本文件分配给字典。
keys = map(str.strip, next(f).split('Key\t')[1].split('\t'))
words = map(str.strip, next(f).split('Word\t')[1].split('\t'))
文本文件具有行标题,后跟值,并用\t
字符分隔。
范例1:
Key a 1 b 2 c 3 d 4
Word as box cow dig
如何更改代码以不读取文件中的所有行,而仅读取特定行?我不想阅读的多余的行应该被忽略:
示例2-忽略LineHere
和OrHere
行:
LineHere w x y z
Key a 1 b 2 c 3 d 4
OrHere 00 01 10 11
Word as box cow dig
或者,如果我想读取标题为“ Word”,“ XOR”或“ Letter”的行,则碰巧出现在文件中。因此,用于扫描示例1或2的代码也适用于:
示例3-我想阅读Key
和Letter
第:
LineHere w x y z
Key a 1 b 2 c 3 d 4
OrHere 00 01 10 11
Letter A B C D
请随时提出问题评论,我很乐意重新表述/澄清问题。
作为参考,此处链接了先驱问题
非常感谢,
亚历克斯
问题答案:
像这样:
import re
with open('abc') as f:
for line in f:
if line.startswith('Key'):
keys = re.search(r'Key\s+(.*)',line).group(1).split("\t")
elif line.startswith(('Word','Letter')):
vals = re.search(r'(Word|Letter)\s+(.*)',line).group(2).split("\t")
print dict(zip(keys,vals))
abc :
LineHere w x y z
Key a 1 b 2 c 3 d 4
OrHere 00 01 10 11
Word as box cow dig
输出是:
{'d 4': 'dig', 'b 2': 'box', 'a 1': 'as', 'c 3': 'cow'}
abc :
LineHere w x y z
Key a 1 b 2 c 3 d 4
OrHere 00 01 10 11
Letter A B C D
输出是:
{'d 4': 'D', 'b 2': 'B', 'a 1': 'A', 'c 3': 'C'}