我有一个很大的文本文件,它只是一个很长的字符串。这是一个巨大的文本 block 。
该文件的原始创建者试图通过在一定数量的字母后设置 \n
制表符来使其成为“矩阵”。
string = "adfajdslfkajsddf&&adfadfladfsjdfl\nadk...fhaldkfjahsdf"
使用正则表达式和模块re
(可能),我如何将这个庞大字符串的每个字符输入到它最初应该是的矩阵中?
此外,字符串中还存在某些垃圾字符,例如“&”、“#”和“{”。有标准模块可以使用吗?
我想人们可以获取原始字符串,根据 '\n' 标记的位置将其分成几个字符串,然后以某种方式将这些字符串按字符串的每个单独字符放入 numpy ndarray 中。
最佳答案
您可以通过几种方式执行此操作,您可以检查每个字符,看看它是否是字母数字:
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,翻译
有点不同:
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)
关于python - 将长字符串转换为矩阵,并对其进行清理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34212429/