-1

私はpython33を使用しており、単語と数字を含むテキストファイルから数字の文字列を取得したいと考えています(以下のコピー/貼り付けされたtxtファイルの30行目)。目的の数値をキャプチャした後、方程式 (つまり (数値-30)/2) を使用してそれらを変換し、平均を見つけて新しいファイル (Scope22.txt または csv など) に書き込みます。これは、同様に処理する必要がある最初のファイルであり、各平均は同じファイル (Scope22.txt または csv) に書き込まれます。添付ファイルには懸念事項の数 (0.0, 66.0, 70.0, 0.0, 0.0, 81.0, 64.0, 0.0, 76.0) が含まれています。これらを ((number-30)/2) に変換し、それらの平均を求めます。
あなたの助けに心から感謝します。

my.txt:

MinorType スコープ
有効時間 201012132300
範囲 536
シータ 48
ID SIT
名前 サイト
LatCentre 23.45459
ロンセンター -22.766379
解像度1 1.0
解像度1 1.0
高さ1 11.0
高さ3 600.0
データ インデックス
入力ファイルの種類 AAA,0,1,PPTOA
MinorProductParameters SCOPe,,BBBBBBB,KKKKK_LIST_SIT,0,0,1,1
TableLabels_Locations ID 名前 有効な緯度経度範囲 シータ BBN Yyy
TableStart_SiteLocations
"LLL"、"QQQQ_WWWWWWW"、1、23.45459、-22.766379、536.11、48.14、55、22;
TableEnd_SiteLocations
TableLabels_TableInfoSites ID Lat Lon Range Theta BMHT PNTVlU Min Max Avg Median P95 AbsDev Var Sd Skew Curt
TableStart_TableInfoSites
LLL、23.45459、-22.766379、536.11、48.14、-1.00、0.00、0.00、81.00、39.67、64.00、0.00、35.26、1.44e+03、37.96、-0.14、-2.13;
TableEnd_TableInfoSites
TableLabels_TableDis Dis M
TableStart_TableDis
LLL, 4,200,190,180,170,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,1,0,0,0,0,0,1,0, 0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,;
TableEnd_TableDis
TableLabels_TableData Values_M
TableStart_TableData
LLL、0.0、66.0、70.0、0.0、0.0、81.0、64.0、0.0、76.0、;
TableEnd_TableData

ここに私のコードがあります:

STATS11_filename='C:/Python33/STATS11.txt'
STATS11_filename=open(STATS11_filename,'r')
line=STATS11_filename.readline()
line=STATS11_filename.readline()
line=STATS11_filename.readline()
line=STATS11_filename.readline()
line=STATS11_filename.readline() 
line=STATS11_filename.readline()
line=STATS11_filename.readline()
line=STATS11_filename.readline()
line=STATS11_filename.readline()
line=STATS11_filename.readline()
line=STATS11_filename.readline()
line=STATS11_filename.readline()
line=STATS11_filename.readline()
line=STATS11_filename.readline()
line=STATS11_filename.readline()
line=STATS11_filename.readline()
line=STATS11_filename.readline()
line=STATS11_filename.readline()
line=STATS11_filename.readline()
line=STATS11_filename.readline()
line=STATS11_filename.readline()
line=STATS11_filename.readline()
line=STATS11_filename.readline()
line=STATS11_filename.readline()
line=STATS11_filename.readline() 
line=STATS11_filename.readline()
line=STATS11_filename.readline()
line=STATS11_filename.readline()    
line=STATS11_filename.readline()
b=line=STATS11_filename.readline()
d=(str(b[7:-3]))
print(len(b[7:-3]))
STATS11_filename.close()
a=7
Scope22_filename='C:/Python33/Scope22.txt'
Scope22_filename=open(Scope22_filename,'w')
for i in range (len(b[7:-3])):
    if (b[a])>='64' or (b[a])<='254':
        Scope22_filename.write(b[a])       
             if a==53:
                 quit
             else:
                 a=a+2
Scope22_filename.close()
4

1 に答える 1

0

変数 b は文字列 (例では b は "0.0, 66.0, 70.0, 0.0, 0.0, 81.0, 64.0, 0.0, 76." に等しい) であり、変数 a int (a は 7 に等しい)、次に b[a]は 1 文字のみを参照します。これは '64' (2 文字の長さ) にすることはできません。

あなたがやろうとしていたのは、そのようなスライスを取得することだったと思いますif float(b[a:a+3])>=64 or float(b[a:a+3])<=254:

(Python では によって改善できますif 64 <= float(b[a:a+3]) <= 254:)

この一連の数値の平均を実際に計算しようとしていますか?

もしそうなら、あなたは次のようなことをするべきです:

b = list(map(lambda n: (float(n)-30)/2, b.split(","))
b = sum(b)/len(b)

問題とは関係ありませんが、コピー/貼り付けの代わりに、たくさんのline=STATS11_filename.readline()ことを行うことができます[STATS11_filename.readline() for i in range(29)](ただし、必要な行にジャンプする機能が必要だと思います(おそらく))。

編集:確かに、あなたもそれを行うことができます: b = STATS11_filename.readlines()[29].

于 2013-02-01T02:07:54.120 に答える