Python 将长字符串转换为矩阵,并对其进行清理
我有一个很大的文本文件,它只是一个很长的字符串。这是一个巨大的文本块 此文件的原始制作者试图通过在一定数量的字母后设置Python 将长字符串转换为矩阵,并对其进行清理,python,regex,string,numpy,matrix,Python,Regex,String,Numpy,Matrix,我有一个很大的文本文件,它只是一个很长的字符串。这是一个巨大的文本块 此文件的原始制作者试图通过在一定数量的字母后设置\n选项卡,使其成为“矩阵” string = "adfajdslfkajsddf&&adfadfladfsjdfl\nadk...fhaldkfjahsdf" 在模块re(可能)中使用正则表达式,如何将这个庞大字符串中的每个字符输入到它最初应该是的矩阵中 此外,字符串中还有某些垃圾字符,如“&”和“#”以及“{”。是否要使用标准模块 我设想,可以将原始字符串,
\n
选项卡,使其成为“矩阵”
string = "adfajdslfkajsddf&&adfadfladfsjdfl\nadk...fhaldkfjahsdf"
在模块re
(可能)中使用正则表达式,如何将这个庞大字符串中的每个字符输入到它最初应该是的矩阵中
此外,字符串中还有某些垃圾字符,如“&”和“#”以及“{”。是否要使用标准模块
我设想,可以将原始字符串,根据“\n”标记的位置将其拆分为两个字符串,然后根据字符串的每个字符将这些字符串以某种方式放入一个numpy数组。您可以通过两种方法来完成此操作,您可以检查每个字符是否为字母数字:
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)
请提供预期的输出,不要忘记提及您已经尝试开发的代码。什么是有效字符或无效字符?@padraiccnningham任何字母/整数都是有效的。所有其他符号都是要删除的垃圾。这应该与
re
和if语句有关,在整个过程中迭代字符串。那么,所有标点符号都是垃圾吗?@PadraicCunningham我明白你的意思了。isalpha()可能是解决问题的方法。值得注意的是,Python 2中支持.translate()
的dict
参数,但仅作为unicode
字符串的一种方法。因此stg=u
可以,或者stg=stg.decode('utf-8')