通过跳转列表的第n个元素来分析python中的文本文件

时间:2012-04-15 16:47:26

标签: python file extract text-files seek

我无法解析包含以下行的txt文件:

50.0 0.1 [0.03, 0.05, 0.067, 1.003, ...]
50.0 0.134 [0.3465, 0.5476, 1.0, ....]
.
.
.

我不需要每行的开头,只需要列表!列表中的元素包含相同数量的字符,并用空格和逗号分隔。

我想要做的是忽略每个列表前面的内容并跳转到(例如)列表的第9个元素,读取值并保存。然后转到下一行并执行相同操作。

我的方法:

找到一种解析txt行的方法,作为列表而不是字符串,这样我就可以处理列表中的元素了。

设法跳转到列表中的第9个值,然后读取所有内容,直到下一个值(在这种情况下为第10个)。

任何想法如何做到这一点?

5 个答案:

答案 0 :(得分:1)

如果您拥有此表单中的每一行:

line = '50.0 0.1 [0.03, 0.05, 0.067, 1.003]\n'

首先删除字符串中不必要的部分。找到'['和']'并使用切片。

line[line.index('[')+1:line.index(']')]

使用分隔符(现在:',')拆分剩余的字符串。你得到一个字符串列表。

line[line.index('[')+1:line.index(']')].split(',')

取第n个元素并用float()或eval()转换它。

float(line[line.index('[')+1:line.index(']')].split(',')[3])  

如果你需要列表中的更多元素,那么用'['和']'来评估字符串,你会得到一个列表。 (注意:eval()很慢。)

eval('[0.03, 0.05, 0.067, 1.003]')  

代码与此类似:

with open('datas.txt') as f:
    n = 8
    for line in f:
        a = float(line[line.index('[')+1:line.index(']')].split(',')[n])  
        do_something_with(a)

答案 1 :(得分:0)

由于你的问题不是很好,我会尝试以更广泛的方式回答

  1. Read the file linearly.
  2. 如果您的数据格式是统一的,即 一个。方形支架在开始和结束时。 湾数字以空格分隔

    使用strip删除任何尾随空格和/或换行符 将其剪切以删除前一个和最后一个字符。

    instr="[0.03 0.05 0.067 1.003]"[1:-1]

    使用split()将字符串拆分为数字列表。

  3. 索引列表以访问第9个元素
  4. 保存或执行您想要做的计算

答案 2 :(得分:0)

如果您需要读取文件并提取每行的第9个元素,您需要执行以下操作:

with open('your_file.txt') as in_file:

    my_list = [line.split()[9] for line in in_file]

答案 3 :(得分:0)

假设文本文件结构与发布完全相同。

def openFile(file):
    "Usage: list = openFile(filename)"
    try:
        linesList = []
        inputFile = open(file, "r")
        tempList = inputFile.readlines()
        inputFile.close()
        for line in tempList:
            linesList.append(line.replace("[","").replace("]","").split())
        return linesList
    except:
        print("Could not open file!")

def saveFile(file, data, element):
    "Usage: saveFile('text.txt',myList,9)"
    outputFile = open(file, "w")
    for line in data:
        outputFile.write(line[element-1] + "\n")
    outputFile.close()



def main():
    myList = openFile("text.txt")
    #now you have a list of lists :D
    #you can do what ever you want with the data
    print(myList)
    saveFile("text2.txt",myList,2)

main()

答案 4 :(得分:0)

要删除行上列表开头的字符,一种方法是获取以开括号字符开头的行的切片。这看起来如下:

line = line[line.index('['):]

然后,您可以使用split()或eval()函数处理字符串,将其转换为列表并从该点检索元素。

line = line[line.index('['):].split()[9]