亲爱的,
我正在尝试阅读包含不同变量之间协方差的非常大的文本文件(> 100 GB)。该布置使得第一变量与全部相关,第二变量与除第一变量之外的所有变量相关(例如,图中的14766203或线[0:19]),依此类推(参见图中的1,2,3) )。这是我的示例数据:
14766203 -10.254364177 105.401485677 0.0049 0.0119 0.0024 0.0014 88.3946 7.340657124e-06 -7.137818870e-06 1.521836659e-06
3.367715952e-05 -6.261063214e-06
3.105358202e-06
14766204 6.126218197e-06 -7.264675283e-06 1.508365235e-06
-7.406839249e-06 3.152004956e-05 -6.020433814e-06
1.576663440e-06 -6.131501924e-06 2.813007315e-06
14766205 4.485532069e-06 -6.601931549e-06 1.508397490e-06
-7.243398379e-06 2.870296214e-05 -5.777139540e-06
1.798277242e-06 -6.343898734e-06 2.291452454e-06
14766204 -10.254727963 105.401101357 0.0065 0.0147 0.0031 0.0019 87.2542 1.293562659e-05 -1.188084039e-05 1.932569051e-06
5.177847716e-05 -7.850639841e-06
4.963314613e-06
14766205 6.259830057e-06 -8.072416685e-06 1.785233052e-06
-8.854538457e-06 3.629463550e-05 -6.703120240e-06
2.047196889e-06 -7.229432710e-06 2.917899913e-06
14766205 -10.254905775 105.400622259 0.0051 0.0149 0.0024 0.0016 88.4723 9.566876325e-06 -1.357014809e-05 2.378290143e-06
5.210766141e-05 -8.356178456e-06
4.016328161e-06
现在我希望能够在python中将它们提取为块,或者至少读取一个块并退出文件读取(例如,1,2,3)。我不能成功,但这是我的努力:
with open(inFile, 'rb') as f: listData = []
for line in f:
MarkNumber = None;
if line[0:19].strip() != '' and line[23:36].strip() !='':
MarkNumber = str(line[0:19].strip())
if line[0:19].strip() == MarkNumber and len(line[23:36].strip()) !=0:
isMark = True
if line[0:19].strip() != MarkNumber and len(line[23:36].strip()) !=0:
isMark = False
if isMark == True:
ListOfData.append(line)
ListOfData倾向于读取所有行,直到文件结束。所以它并没有真正帮助。
任何帮助解决这个问题的人都将不胜感激。
感谢Nakhap
答案 0 :(得分:0)
您是否可以使用正则表达式来查找具有第二个数字块的块,例如,以一行开头的数字块的15个字符?
import re
inFile = 'C:/path/myData.txt'
myregex = r'(^[.0-9e-]{1,15}[\W]{1,15}[.0-9e-])'
thisBlock = []
with open(inFile, 'rb') as f:
for line in f:
if re.search(re.compile(myregex),line):
print("Previous block finished. Here it is in a chunk:")
print(thisBlock)
print("\n\n\nNew block starting")
thisBlock = [line]
else:
thisBlock.append(line)
正则表达式myregex
在两个数字序列{1,15}
之间查找空格[\W]
的1到15 [.0-9e-]
个字符 - 这会查找数字0-9,如以及小数点,负号和指数e。表达式中的第一个{1,15}假定行开头的第一个数字表达式至少为1,但少于15个字符。