使用 np.loadtxt 从格式奇怪的文本文件中导入数据

Using np.loadtxt to Import Data from a Strangely-Formatted Text File

我正在尝试从收到的文本文件中导入数据。

文本文件有点大 (400 MB)。可从此 link (https://drive.google.com/file/d/11CwId3feJRZGvP2OUAtixuZEFztrCP3W/view?usp=sharing) 获得。鉴于其大小,下载可能需要几分钟时间。

文件中的数据是我以前从未遇到过的格式。列之间的分隔符似乎是分号,数据行之间似乎被一个空行分隔。

我无法读入数据。以下是我用来尝试从文件中导入一列字符串数据和两列浮点数据的 Python 代码:

import numpy as np
f = 'summ.txt'
ID = np.loadtxt(f, dtype=np.str, unpack=True, usecols=[4], skiprows=8, delimiter = '; ')
hbeg, hend = np.loadtxt(f3, unpack=True, usecols=[67,73], skiprows=8, delimiter = '; ')

一个solution/guidance就太好了。

我会简单地使用 csv 重新格式化它

import csv
import time

start = time.time()

with open('summ.txt') as fin, open('output.txt', 'w') as fout:
   csv_reader = csv.reader(fin,  delimiter=';')  # read semicolon
   csv_writer = csv.writer(fout, delimiter=',')  # write comma
   for row in csv_reader:
       if row:  # skip empty row
           row = [x.strip() for x in row]  # remove spaces
           csv_writer.writerow(row)
        
end = time.time()

print('time:', end-start)

在我的电脑上花了大约 31 秒。

但您也可以将值保留为二维列表并转换为 numpy arraypandas DataFrame

import csv
import time

start = time.time()

IDs  = []
hbeg = []
hend = []

with open('Pulpit/summ.txt') as fin:
    csv_reader = csv.reader(fin,  delimiter=';')
    for row in csv_reader:
        if row:
            row = [x.strip() for x in row]
            if len(row) > 1:
                IDs.append(row[4])
                hbeg.append(row[64])       
                hend.append(row[73])       
        
end = time.time()

print('time:', end-start)

print(IDs[:10])
print(hbeg[:10])
print(hend[:10])