У меня был файл, содержащий данные о зарегистрированных наблюдениях видов, которые выложены в формате;Анализ данных из файла
«Вид», «\ т», «широта», «\ т», «Долгота»
мне нужно определить функцию, которая будет загружать данные из файла в списке, в то время как для каждого строка в списке, собирая ее на три компонента, название вида, широту и долготу.
Это то, что я имею, но он не работает:
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
Я пытаюсь напечатать одну строку набора данных, чтобы проверить, если он правильно splittiing, но ничего не отображается в оболочке
Update:
Это код, с которым я сейчас работаю;
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
Вы можете уточнить * "не работает" *? Можете ли вы также дать фрагмент файла, чтобы мы могли экспериментировать с ним? Просто глядя на ваш код, я подозреваю, что проблема может заключаться в том, что вы добавляете 'Line' в' DataList' вместо 'EntryList'. – Reti43
'для входа в line.split (" \ t "): entrylist.append (запись)' Не используйте CamelCase для имен переменных. Используйте строчные буквы. – zondo
@zondo PEP8 на самом деле рекомендует нижний регистр нижнего регистра с нижним регистром для имен переменных и функций. - не то, что это влияет на работу кода в любом случае, но если вы собираетесь исправить OP, вы можете следовать соглашению.Тем не менее, я использую mixedCase для своих переменных, чтобы сделать мой код более читаемым для меня (mixedCase не рекомендуется ни для чего в PEP8, и для меня имеет смысл иметь разные стили именования для функций и переменных). – Tom