我有一个很大的文本文件,它只是一个很长的字符串。这是一个巨大的文本块。
此文件的原始制作者试图通过在一定数量的字母后设置\n
标签使其成为“矩阵”。
string = "adfajdslfkajsddf&&adfadfladfsjdfl\nadk...fhaldkfjahsdf"
使用带有模块re
的正则表达式(可能),如何将这个庞大字符串的每个字符输入到最初应该是的矩阵中?
此外,字符串中还有某些垃圾字符,例如“&”和“#”和“{”。是否有标准模块可供使用?
我想可以拿出原始字符串,根据'\ n'标记的位置将其分解为几个字符串,然后将这些字符串以某种方式放入字符串中每个字符的numpy ndarray中。
答案 0 :(得分:2)
你可以这样做,你可以检查每个char是否是字母数字:
stg = "abcde123]\nefghi456}\njk{lmn789"
import numpy as np
arr = np.array([ch for line in stg for ch in line if ch.isdigit() or ch.isalpha()])
如果所有垃圾都是标点符号,您可以str.translate
:
from string import punctuation
junk = {ord(ch):"" for ch in punctuation + "\n"}
arr = np.array(list(stg.translate(junk)))
两者都会给你一个单一的列表:
['a' 'b' 'c' 'd' 'e' '1' '2' '3' 'e' 'f' 'g' 'h' 'i' '4' '5' '6' 'j' 'k' 'l' 'm' 'n' '7' '8' '9']
如果您需要多维数组,可以在换行符上拆分:
arr = np.array([[ch for ch in line ] for line in stg.translate(junk).split()])
arr = np.array([[ch for ch in line if ch.isdigit() or ch.isalpha()] for line in stg.split()])
哪个会给你:
[['a' 'b' 'c' 'd' 'e' '1' '2' '3']
['e' 'f' 'g' 'h' 'i' '4' '5' '6']
['j' 'k' 'l' 'm' 'n' '7' '8' '9']]
对于python2,translate
有点不同:
from string import punctuation
import numpy as np
stg = "abcde123]\nefghi456}\njk{lmn789"
arr = np.array([[ch for ch in line ] for line in stg.translate(None, punctuation).split()])
print(arr)