我想读入一个 csv 文件,然后将数据作为特定变量存储在标题下。
我的 csv 文件:
multiplicity
4.123
lattice parameters
1,0,0
0,1,0
0,0,1
atom sites
0,0,0
0.5,0.5,0.5
occupancy
1,0
0,1
我想创建一个代码,它可以自动将多重性下的行存储为变量的数据,等等,用于 csv 的其余部分。我不能在 csv 中硬编码值,例如 multiplicity is line[2],因为每行的行数都会改变。我想创建一个循环,将标题之间的数据存储为变量,但我不确定如何。
理想情况下,我希望代码搜索第一个 header 和第二个 header ,然后将它们之间的值保存为多重变量。然后我希望它找到第二个标题和第三个标题并将这些值保存为点阵参数。找到第三个标题和第四个标题以及它们之间的值作为原子站点。最后找到第四个标题和 csv 的结尾,并将中间的值保存为占用率。
请您参考如下方法:
我的 0.02 美元:
- 您在问题中列出的方法过于复杂。您不需要识别第一个和第二个标题并在其间附加数据。你需要:
- 一种识别您是否点击标题的方法
- 将适当处理 header 后的值的代码
这不是工作代码,但您可能需要来自 python csv module 的一些东西,可能看起来像这样(RoadRunner 的代码更完整,但我认为我们都沿着相同的路线前进,最终会得到几乎相同的输出)。
data_dict = {}
import csv
with open('file_name.csv', newline='') as csvfile:
csvreader = csv.reader(csvfile, delimiter=',')
curr_header = "IF THIS IN DICT, SOMETHING IS WRONG"
for row in csvreader:
try: # look for header, if not header, append data
float(row[0])
data_dict[curr_header].append([float(x) for x in row])
except ValueError: # found a header
curr_header = row[0]
data_dict[curr_header] = []
print(data_dict)
