使用Python从文本文件中读取特定列值

时间:2018-01-26 13:24:34

标签: python text

我有一个文本文件如下:

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中完成这项工作?

3 个答案:

答案 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)