【发布时间】:2016-07-07 06:29:10
【问题描述】:
我收到了一份文件,其中包含记录的物种目击记录数据,格式为;
“物种”、“\t”、“纬度”、“\t”、“经度”
我需要定义一个函数,它将文件中的数据加载到一个列表中,同时对于列表中的每一行,将其分为三个部分,即物种名称、纬度和经度。
这是我拥有的,但它不起作用:
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
我正在尝试打印一行数据集以测试它是否正确拆分,但外壳中没有显示任何内容
更新:
这是我现在正在使用的代码;
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)
运行程序时出现错误:
CalculateDistance(Entry[1], Entry[2], 54.988056, -1.619444) NameError: name 'Entry' is not defined
【问题讨论】:
-
您能否详细说明“不工作”?您能否也提供该文件的 sn-p 以便我们进行试验?看看你的代码,我怀疑问题可能是你在
DataList中附加了Line而不是EntryList。 -
for entry in line.split("\t"): entrylist.append(entry)变量名不要使用 CamelCase。使用小写。 -
@zondo PEP8 实际上建议变量和函数名称使用下划线分隔的小写字母。 --并不是说它会影响代码的操作,但是如果您要更正 OP,您可能需要遵循约定。也就是说,我为我的变量使用了混合大小写,以使我的代码对我来说更具可读性(在 PEP8 中不建议将混合大小写用于任何东西,对我来说,对函数和变量使用不同的命名风格更有意义)。
-
它的字面意思是
"Species", "\t", "Latitude", "\t", "Longitude"还是Species\tLatitude\tLongitude(\t是一个制表符)。如果是这样,它是一个标准的 tad 分隔的 CSV(我知道,奇怪的命名......),csv模块可以处理它。 -
@Tom:我不是说要使用小写吗?你评论是因为你认为我应该说小写吗?我很清楚 PEP8 的意见,事实上这就是我提到它的原因。我绝对同意函数和变量应该具有与类不同的命名风格。我不使用小写的类;我使用 CamelCase,所以我相信我会遵循这一点。
标签: python list split text-segmentation