【发布时间】:2021-01-04 17:02:31
【问题描述】:
我一直在试图弄清楚如何仅使用 python 将这些稍微不寻常的格式化数据操作为可绘制的格式(我一直在使用 sed 之类的 shell 脚本,但我想做所有我在 python 中长期编写脚本,因为那是我通常使用的)。
我的数据如下所示:
# Title of File
# step number_of_slices total_a
# slice Coord N v
51000 5 240000
1 0.025 12003 0.0255628
2 0.075 11991 0.0257368
3 0.125 11989 0.0258158
4 0.175 11997.2 0.0259262
5 0.225 11995.8 0.0258637
52000 5 240000
1 0.025 12004.7 0.0251662
2 0.075 11998.7 0.0256496
3 0.125 11996.3 0.025816
4 0.175 11994 0.0259593
5 0.225 12008.3 0.0258245
.
.
.
1010000 5 240000
1 0.025 12304.6 0.0182998
2 0.075 12146.1 0.0195533
3 0.125 12026.9 0.0211158
4 0.175 12003.5 0.0228836
5 0.225 12000.3 0.0242854
我希望仅将第四列中的数据附加到每个“步骤”的单个文件中,即
Steps 51000 52000 ... 1010000
1 0.0255628 0.0251662 ... 0.0182998
2 0.0257368 0.025816 ... 0.0195533
3 0.0258158 0.0259593 ... 0.0211158
4 0.0259262 0.0258245 ... 0.0228836
5 0.0258637 0.0258245 ... 0.0242854
在 bash 中,这很容易。我每 6 行剪切第四列并附加到一个新文件中。但我一生都无法弄清楚如何仅使用 python 来做到这一点。
这是我得到的最好的:
import csv
f = open('file.dat')
csv_f = csv.reader(f, delimiter = " ")
column = []
for row in csv_f:
column.append(row[5])
print column
f.close()
5 是因为我最后的前两列是空的(我猜这是格式化的东西)但是因为有些行只有 3 个元素,这给了我一个错误,所以我什至无法隔离列以开始得到我想要的格式:
['51000', '20', '240000']
['', '', '1', '0.025', '12003', '0.0255628']
['', '', '2', '0.075', '11991', '0.0257368']
['', '', '3', '0.125', '11989', '0.0258158']
['', '', '4', '0.175', '11997.2', '0.0259262']
['', '', '5', '0.225', '11995.8', '0.0258637']
Traceback(最近一次调用最后一次): 文件“open.py”,第 13 行,在 column.append(行[5]) IndexError: 列表索引超出范围
在这一点上,我认为我过于复杂了,我想出的任何解决方案都会相当复杂,而不是像预期的那样简化我的工作流程。什么是“正确”的方式?请和谢谢你
【问题讨论】:
-
不使用 csv。只需遍历文件中的行并解析每一行 - 检查它是否以空格开头。在空格处分割。取决于行的开头 - 取你想要的元素。前 3 行不清楚 - 它们是否存在于文件中?
-
如果步骤总是 5 - 你可以使用它而不是检查哪一行开始
标签: python csv data-files