Python 解析文件中的数据

Python 解析文件中的数据,python,list,split,text-segmentation,Python,List,Split,Text Segmentation,我已收到一份文件,其中包含记录的物种目击数据,格式如下: 物种,纬度,经度 我需要定义一个函数,将文件中的数据加载到列表中,同时将列表中的每一行数据分为三个部分:物种名称、纬度和经度 这是我所拥有的,但它不起作用: def LineToList(FileName): FileIn = open(FileName, "r") DataList = [] for Line in FileIn: Line = Line.rstrip() Data

我已收到一份文件,其中包含记录的物种目击数据,格式如下:

物种,纬度,经度

我需要定义一个函数,将文件中的数据加载到列表中,同时将列表中的每一行数据分为三个部分:物种名称、纬度和经度

这是我所拥有的,但它不起作用:

def LineToList(FileName):
    FileIn = open(FileName, "r")
    DataList = []
    for Line in FileIn:
        Line = Line.rstrip()
        DataList.append(Line)
        EntryList = []
        for Entry in Line:
            Entry = Line.split("\t")
            EntryList.append(Entry)
    FileIn.close()
    return DataList

LineToList("Mammal.txt")
print(DataList[1])
我需要将每条线上的数据分开,以便以后可以使用它来计算物种在给定位置一定距离内的位置

样本数据:

Myotis nattereri    54.07663633 -1.006446707
Myotis nattereri    54.25637837 -1.002130504
Myotis nattereri    54.25637837 -1.002130504
我试图打印一行数据集,以测试它是否正确拆分,但shell中没有显示任何内容

更新:

这就是我现在使用的代码

def LineToList(FileName):
    FileIn = open(FileName, "r")
    DataList = []
    for Line in FileIn:
        Line = Line.rstrip()
        DataList.append(Line)
        EntryList = []
        for Entry in Line:
            Entry = Line.split("\t")
            EntryList.append(Entry)
            return EntryList
    FileIn.close()
    return DataList

def CalculateDistance(Lat1, Lon1, Lat2, Lon2):

    Lat1 = float(Lat1)
    Lon1 = float(Lon1)
    Lat2 = float(Lat2)
    Lon2 = float(Lon2)

    nDLat = (Lat1 - Lat2) * 0.017453293
    nDLon = (Lon1 - Lon2) * 0.017453293

    Lat1 = Lat1 * 0.017453293
    Lat2 = Lat2 * 0.017453293

    nA = (math.sin(nDLat/2) ** 2) + math.cos(Lat1) * math.cos(Lat2) * (math.sin(nDLon/2) ** 2 )
    nC = 2 * math.atan2(math.sqrt(nA),math.sqrt( 1 - nA ))
    nD = 6372.797 * nC

    return nD

DataList = LineToList("Mammal.txt")                
for Line in DataList:
    LocationCount = 0
    CalculateDistance(Entry[1], Entry[2], 54.988056, -1.619444)
    if CalculateDistance <= 10:
        LocationCount += 1
    print("Number Recordings within Location Range:", LocationCount)

DataList变量是LineToList函数的本地变量;您必须在文件范围内分配给另一个变量:

DataList = LineToList("Mammal.txt")
print(DataList[1])

我认为您有一个常规的以标签分隔的CSV,CSV.reader可以为您轻松解析

import csv
DataList = [row for row in csv.reader(open('Mammal.txt'), dialect='excel-tab')]
for data in DataList:
    print(data)
这导致

['Myotis nattereri', '54.07663633', '-1.006446707']
['Myotis nattereri', '54.25637837', '-1.002130504']
['Myotis nattereri', '54.25637837', '-1.002130504']

我在你们的个人资料中看到了生物科学,正因为如此,我建议你们仔细看看这个模块

这可能非常简单:

import pandas as pd

df = pd.read_csv('mammal.txt', sep='\t',
                 names=['species','lattitude','longitude'],
                 header=None)

print(df)
输出:

            species  lattitude  longitude
0  Myotis nattereri  54.076636  -1.006447
1  Myotis nattereri  54.256378  -1.002131
2  Myotis nattereri  54.256378  -1.002131

你能详细说明一下不工作的原因吗?你能不能也给我们一个文件的片段,这样我们就可以用它做实验了?仅查看您的代码,我怀疑问题可能是您在DataList中追加了行而不是EntryList.for行中的条目。split\t:EntryList.appendentry对变量名不使用CamelCase。使用小写。@zondo PEP8实际上建议变量名和函数名使用下划线分隔的小写-这并不是说它会以任何方式影响代码的操作,但是如果您要更正OP,您可能需要遵循约定。也就是说,我对变量使用mixedCase使我的代码更具可读性。在PEP8中,mixedCase不建议用于任何东西,对我来说,函数和变量使用不同的命名样式更有意义。它的字面意思是物种、\t、纬度、\t、,经度或种类\t经度\t作为制表符。如果是这样的话,我知道这是一个标准的tad分隔的CSV,奇怪的命名。。。csv模块可以处理它。@Tom:我不是说过要用小写吗?你的评论是因为你认为我应该说小写吗?我很清楚PEP8的观点,事实上这就是我提到它的原因。我完全同意函数和变量应该有不同于类的命名风格。我不在课堂上使用小写字母;我用的是CamelCase,所以我相信我会明白的。谢谢!它现在正在壳中打印@尼科勒金:如果你将我的答案标记为已接受,这将向其他人表明你有一个解决方案。
            species  lattitude  longitude
0  Myotis nattereri  54.076636  -1.006447
1  Myotis nattereri  54.256378  -1.002131
2  Myotis nattereri  54.256378  -1.002131