2016-03-21 4 views
0

リストのすべての行について、 "\ t"で区切られた3つのコンポーネントに分割しようとしていますが、このコードは "t"で分割されていません。代わりに、行全体を手紙で分割しています。文字列を " t"で分割しない関数

# Function to load a set of sequences from a given file 
# File should be stored as a sequence per line 
# Input: File name containing sequences 
# Output: List of all sequences in that file 
def LoadSeq(FileName): 
    FileIn = open(FileName, "r") 
    SeqList = [] 
    for Line in FileIn: 
     Line = Line.rstrip() 
     SeqList.append(Line) 
    FileIn.close() 
    return SeqList 

def LineToList(Str): 
    Str = Str.rsplit() 
    return Str.split("\t") 

import math 

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 

def LocationCount(FileName, DesiredDistance, DesiredLat, DesiredLong): 
    for Line in LoadSeq(FileName): 
     LineToList(Line) 
     Counter = 0 
     CalculateDistance(Seq[1], Seq[2], DesiredLat, DesiredLong) 
     if CalculateDistance <= DesiredDistance: 
      Counter += 1 
    return Counter 

NumberInDistance = LocationCount("Mammal.txt", 20, 50.261667, -5.043333) 
print(NumberInDistance) 

これは私が使用していたコードですが、私はそれを正しく分割していませんか、それとももっと混乱していますか?私はPythonを使用する必要があり、可能な場合はこれと同様のforrmattingにしておく必要があります。

+1

サンプル入力ファイルでお手伝いできますか?そして、現在の出力はどのように見えますか? –

+0

サンプル文書をアップロードする方法を完全にはわかっていません – NKing

答えて

1

LineToListファンクションでは、まず.rsplit()を呼び出して、文字列パラメータをリストに変換します。次にに別の.split()と入力すると、文字列に.split()しかコールできないため、エラーが発生します。これ.rsplit()によって識別することを可能に' ''\t'を変更

def LineToList(Str): 
    return Str.replace("\t", " ").rsplit() 

代わりにあなたの関数を変更します。


>>> def LineToList(Str): 
...  return Str.replace("\t", " ").rsplit() 
... 
>>> LineToList("hi\tthis\tis\tdata") 
['hi', 'this', 'is', 'data'] 
>>> 
2

あなたは(定義されていない特定の区切りで)rsplitを最初に呼ばれていることsplits the string on any whitespace charます。その後、リストにsplitrsplitが返されます)という例外が発生します。

タブで分割する場合は、LineToListの最初の行を削除する必要があります。

def LineToList(Str): 
    return Str.split("\t") 
+0

これを調整しても問題はありませんが、 トレースバック(最新のコール最後):52行目 NumberInDistance = LocationCount( "Mammal.txt"、20、50.261667、-5.043333) 行46、LocationCount Dist = CalculateDistance(Seq [Counter + 1]、Seq [Counter + 2]、DesiredLat、DesiredLong) IndexError:リストインデックスアウト範囲 – NKing

+0

@NicoleKing 'mammal.txt'の1行か2行を教えてください。 –

+0

Myotis nattereri \t 54.07663633 \t -1.006446707 Myotis nattereri \t 54.25637837 \t -1.002130504 Myotis nattereri \t 54.25637837 \t -1.002130504 Myotis nattereri \t 54.25637837 \t -1.002130504 Myotis nattereri \t 53.95498846 \t -0.920178777 Pipistrellus pipistrellus扇子ラト\t 56.12259134 \t -4.49369336 Pipistrellus pipistrellus sensu lato \t 56.08071489 \t -4.563323198 Pipistrellus pipistrellus sensuのラト\t 55.89753176 \t -4.279250374 Myotis daubentonii \t 52.24773003 \t -1.084432324 Myotis daubentonii \t 52.3648261 \t -1.111389624 Myotis daubentonii \t 52。40067491 \t -1.095969578 Myotis daubentonii \t 52.45438582 \t -1.065434228 – NKing