我正在创建一个程序,该程序读取文本文件并获取数据,然后将其放入数组。我的问题是,在某些情况下,列原本打算是空白的,但空白值仍必须视为一个值,但是当我的程序读取空白列时,它将读取下一个值并将其放入应包含该值的数组中为0或空白。我试图计算每列之间的间隔以使其成为条件,但是由于数据的长度不同,所以这些间隔并不可靠。关于如何执行此操作的任何想法?
这是我的文本数据的外观。
Data1 Data2 Data3
1.325 1.57 51.2
2.2 21.85
12.5 25.13
15.85 13.78 1.85
我需要我的数组看起来像这样
firstRow['1.325','1.57','51.2'];
secondRow['2.2','0','21.85'];
如果文件是tab
分割的,请使用line.Split("\t")
获取每一行的子字符串数组。然后,您可以将每个子字符串转换为数据类型。您的情况必须为空,例如decimal?
。
这里是一个起点,如果您具有一个标题列表(按其在数据中的显示顺序,并且您的值始终与标题对齐)。>>
import io, csv, sys
data = '''\
Data 1 Data 2 Data 3
1.325 1.57 51.2
2.2 21.85
12.5 25.13
15.85 13.78 1.85
'''
headers = ['Data 1', 'Data 2', 'Data 3'] # order should match headers
f = io.StringIO(data)
h = f.readline()
indexes = [h.find(s) for s in headers]
rows = []
for line in f:
line = line[:-1] # strip trailing linefeed
d = {}
for key, index in list(zip(headers, indexes))[::-1]: # slice from the right
val = line[index:]
line = line[:index]
d[key] = val.strip()
rows.append(d)
writer = csv.DictWriter(sys.stdout, headers)
writer.writeheader()
writer.writerows(rows)