Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/359.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 将长字符串转换为矩阵,并对其进行清理_Python_Regex_String_Numpy_Matrix - Fatal编程技术网

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')