使用 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 array
或 pandas 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])
我正在尝试从收到的文本文件中导入数据。
文本文件有点大 (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 array
或 pandas 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])