将长字符串转换为矩阵

2024-06-01 08:52:02 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个很大的文本文件,只是一个很长的字符串。这是一大块文字。你知道吗

这个文件的原始制作者试图通过在一定数量的字母后设置\n制表符,使其成为一个“矩阵”。你知道吗

string = "adfajdslfkajsddf&&adfadfladfsjdfl\nadk...fhaldkfjahsdf"

使用带有模块re(可能)的正则表达式,如何将这个庞大字符串的每个字符输入到它最初应该是的矩阵中?你知道吗

此外,字符串中还有某些垃圾字符,如“&;”、“#”和“{”。是否有标准模块可供使用?你知道吗

我想可以取原始字符串,根据'\n'标记的位置将其分解为几个字符串,然后通过字符串的每个单独字符将这些字符串以某种方式放置到numpy ndarray中。你知道吗


Tags: 模块文件字符串数量string字母矩阵字符
1条回答
网友
1楼 · 发布于 2024-06-01 08:52:02

您可以通过几种方法来实现这一点,您可以检查每个字符是否为字母数字:

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)

相关问题 更多 >