我正在尝试将大型文本数据加载到 numpy 数组中。Numpy 的 loadtxt 和 genfromtxt 不适用于 as ,
- 首先,我需要删除以分隔符开头的注释行
['#','!','C']
- 其次,数据中存在重复模式,
n*value
其中n
是整数重复次数,value
是浮点数据。
因此,我尝试使用 读取文本文件readlines()
,然后使用 Numpyloadtxt
将数据转换为 Numpy 数组。
对于阅读和替换,我尝试使用正则表达式(re
模块)但无法正常工作。但是,以下 Python 代码正在运行。我的问题是这样做的最有效和 Pythonic 方式是什么?
如果是正则表达式,在readlines()
列表对象中进行以下查找和替换的正确正则表达式代码是什么:
lines = ['1 2 3*2.5 3 6 1*.3 8 \n', '! comment here\n', '1*1 2.0 2*2.1 3 6 0 8 \n']
for l, line in enumerate(lines):
if line.strip() == '' or line.strip()[0] in ['#','!','C']:
del lines[l]
for l, line in enumerate(lines):
repls = [word for word in line.strip().split() if word.find('*')>=0]
print repls
for repl in repls:
print repl
line = line.replace(repl, ' '.join([repl.split('*')[1] for n in xrange(int(repl.split('*')[0]))]))
lines[l] = line
print lines
输出如下:
['1 2 2.5 2.5 2.5 3 6 .3 8 \n', '1 2.0 2.1 2.1 3 6 0 8 \n']
编辑:
根据评论,我编辑了我的 Python 代码如下:
in_lines = ['1 2 3*2.5 3 6 1*.3 8 \n', '! comment here\n', '1*1 2.0 2*2.1 3 6 0 8 \n']
lines = []
for line in in_lines:
if line.strip() == '' or line.strip()[0] in ['#','!','C']:
continue
else:
repls = [word for word in line.strip().split() if word.find('*')>=0]
for repl in repls:
line = line.replace(repl, ' '.join([float(repl.split('*')[1]) for n in xrange(int(repl.split('*')[0]))]))
lines.append(line)
print lines