python 3.4将文本文件过滤到列表中
我在将.txt文件过滤到子列表中时遇到了一些问题,然后我可以将其转换为目录。 文本.txtpython 3.4将文本文件过滤到列表中,python,Python,我在将.txt文件过滤到子列表中时遇到了一些问题,然后我可以将其转换为目录。 文本.txtA2.-B4-…C4-…D3-…E1.F4-…G3--.H4…75--…85--…95--.05--.6--,6--?6--。。!5.。没有空格或换行符,它基本上是一行文本。A2。-意味着符号“a”在莫尔斯电码中有两个字符,它们是。-,等等我想做的是将这个长字符串拆分为子列表,然后我可以将其压缩到一个目录中,然后我可以使用它来制作莫尔斯电码转换器。我想让程序做的是:制作一个包含键a、B、C、、、、、、、、的
A2.-B4-…C4-…D3-…E1.F4-…G3--.H4…75--…85--…95--.05--.6--,6--?6--。。!5.。
没有空格或换行符,它基本上是一行文本。
A2。-意味着符号“a”在莫尔斯电码中有两个字符,它们是。-,等等
我想做的是将这个长字符串拆分为子列表,然后我可以将其压缩到一个目录中,然后我可以使用它来制作莫尔斯电码转换器。我想让程序做的是:制作一个包含键a、B、C、、、、、、、、
的列表keyList,以及另一个包含键值的列表valueList。
但是,由于键不全是字母,我在过滤整个文件时遇到了问题
我尝试过的:
import re
r = open("text.txt", "r")
ss = r.read()
p = re.compile('\w'+'\w')
keyList = p.findall(ss)
ValueList = p.split(ss)
print(keyList)
print(ValueList)
如图所示,值列表将无法正确拆分,因为“\w”+“\w”将只匹配字母数字字符。。我尝试过在re.compile上更改参数,但没有找到任何有效的方法。有什么帮助吗?重新编译是最好的方法,还是有其他方法可以过滤文本 编辑:预期/想要的输出:
keyList = ['A','B','C','D',...,'.','?',',']
ValueList = ['.-','-...','-.-.','-..',...,'.-.-.-','..--..','--..--']
要制作编码器/解码器,您可能需要使用字典而不是列表 就解析它而言,这里最好采用直接的简单方法
result = {}
with open('morse.txt', 'r') as f:
while True:
key = f.read(1)
length_str = f.read(1)
if len(key) != 1 or len(length_str) != 1:
break
try:
length = int(length_str)
except ValueError:
break
value = f.read(length)
if len(value) == length:
result[key] = value
for k, v in result.items():
print k, v
结果:
A .-
! ..--.
C -.-.
B -...
E .
D -..
G --.
F ..-.
H ....
, --..--
. .-.-.-
0 -----
7 --...
9 ----.
8 ---..
? ..--..
您可以尝试以下方法:
items = re.findall(r'(.\d)([\.-]+)', ss)
keys = [s[0][0] for s in items]
values = [s[1] for s in items]
我得到:
>>> keys
['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', '7', '8', '9', '0', ',', '?', '!']
values
['.-', '-...', '-.-.', '-..', '.', '..-.', '--.', '....', '--...', '---..', '----.', '-----.', '--..--', '..--..', '..--.']
与之类似,我将使用一个循环来解析它,但我将以相反的顺序进行:
morse_str = 'A2.-B4-...C4-.-.D3-..E1.F4..-.G3--.H4....75--...85---..95----.05-----.6.-.-.-,6--..--?6..--..!5..--.'
morse_list = list(morse_str)
morse_dict = {}
while morse_list:
morse = ''
while True:
sym = morse_list.pop()
try:
int(sym)
except ValueError:
morse += sym
else:
key = morse_list.pop()
morse_dict[key] = morse[::-1]
break
要查找可在正则表达式中使用的键,请执行以下操作:
>>> s = 'A2.-B4-...C4-.-.D3-..E1.F4..-.G3--.H4....75--...85---..95----.05-----.6.-.-.-,6--..--?6..--..!5..--.'
>>> keys = re.findall(r'[\w|\W](?=\d\W)',s)
['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', '7', '8', '9', '0', '.', ',', '?', '!']
因为您没有像这样的字母字符
和,.
在键和值中,您不能使用jut onere
函数来获取期望值,您可以使用该模式和split()
函数根据键拆分字符串,这样您就可以输出期望值,只需在前导添加一个数字,然后用re.sub()
删除该数字:
因此,重要的是,对于键
和值
,必须使用相同的len
:
>>> len(keys)
16
>>> len(values)
16
最后给他们拉上拉链:
>>> dict(zip(keys,values))
{'A': '.-', '!': '..--.', 'C': '-.-.', 'B': '-...', 'E': '.', 'D': '-..', 'G': '--.', 'F': '..-.', 'H': '...', ',': '--..--', '.': '.-.-.-', '0': '-----', '7': '--..', '9': '----', '8': '---.', '?': '..--..'}
你只想要这些信吗?像
A
,B
?您能否将预期输出添加到问题中?是的,这基本上就是我想要的,但是列表中不仅包含字母,甚至“.”还有一个摩尔斯电码是。-。-。-。--,所以我希望“.”也是一个带有值的键。“-.-.-”
那么数字呢?最好添加欲望输出!这比我的回答要简洁得多。我猜长度除了作为定界符之外没有任何作用!
>>> len(keys)
16
>>> len(values)
16
>>> dict(zip(keys,values))
{'A': '.-', '!': '..--.', 'C': '-.-.', 'B': '-...', 'E': '.', 'D': '-..', 'G': '--.', 'F': '..-.', 'H': '...', ',': '--..--', '.': '.-.-.-', '0': '-----', '7': '--..', '9': '----', '8': '---.', '?': '..--..'}