我有一个文本文件如下:
1 1 2 1 1e8
2 1 2 3 1e5
3 2 3 2 2000
4 2 5 6 1000
5 2 4 3 1e4
6 3 6 4 5000
7 3 5 2 2000
8 3 2 3 5000
9 3 4 5 1e9
10 3 2 3 1e6
在我的文本中(比这个例子大得多)第二列是层数,最后一列是该层中的能量,我想提取每层中的能量,例如,对于数字2中的数字第二列,我需要从最后一列开始与此Layer相关的能量,我想分开这部分文本文件
3 2 3 2 2000
4 2 5 6 1000
5 2 4 3 1e4
我如何在python中完成这项工作?
答案 0 :(得分:2)
您可以像这样
从文本文件中获取图层和能量layers = []
energies = []
with open(file) as f:
for line in f:
linesplit = line.strip().split() # splits by whitespace
layers.append(int(linesplit[1])) # 2nd index
energies.append(float(linesplit[-1])) # last index
编辑:如果你有一个标题行(比如第1行),你可以跳过它:
header_line = 1 # or whatever it is
with open(file) as f:
for line_number, line in enumerate(f, 1):
if line_number <= header_line:
continue
linesplit = line.strip().split()
layers.append(int(linesplit[1]))
energies.append(float(linesplit[-1]))
我不知道你的文件是什么样的,因为你还没有发布完整的文章,所以我无法帮助你,而不会看到整个文件(例如在pastebin.com上)
最后一次尝试:
layers = []
energies = []
with open(file) as f:
for lineno, line in enumerate(f, 1):
linesplit = line.strip().split() # splits by whitespace
if not linesplit: # empty
continue
try:
layers.append(int(linesplit[1])) # 2nd inde
except (TypeError, IndexError):
print("Skipping line {}: {!r}".format(lineno, line))
continue
try:
energies.append(float(linesplit[-1])) # last index
except TypeError:
layers.pop()
print("Skipping and reverting line {}: {!r}".format(lineno, line)):
答案 1 :(得分:1)
为什么不首先创建CSV文件? 因此,您可以使用&#39 ;;&#39;分隔每个值/列。 每个新行,都会在该CSV文件中打印一个新行。
如果是CSV,您只需使用&#39; split&#39;
line.split(';')[column you want]
示例:
line = '1;1;2;1;1e8'
print(line.split(';')[5])
>> 1e8
编辑: 从文件中读取所有行并将其放入数组中。 注意:此代码未经过测试,并且编写得很快。它应该显示你必须走的方向。
elements = []
f.open('filename')
lines = f.readlines()
for x, line in lines:
elemenets.append([])
for y in range(0,5):
elements[x].append(line.split()[y])
如果您已经知道需要哪一行,可以使用:
f.open('filename')
lines = f.readlines()
print(lines[index_of_line].split()[index_of_item])
答案 2 :(得分:0)
不带任何参数的Split方法会在空格上拆分字符串。 a.txt - 是数据文件名。
#!/usr/bin/env python
with open ('a.txt') as f:
for line in f:
line.strip() # Removes \n and spaces on the end
var1, var2, var3, var4, var5 = line.split()
print(var1, var2, var3, var4, var5)