1

Pythonでtxtファイルからインポートして配列しようとしています。

ファイルは一連の配列または「リスト」です。基本的に各配列には、15から30程度のさまざまな量の整数が含まれている用語がわかりません。

私が試した方法は行ごとにしか読み取れませんが、1つの配列が4行にまたがり、各配列全体を読み取る必要があるため、これは機能しません。

データの形式は次のとおりです。

  9     10     11     12     13     14     15     16     17     18
  19     20     21     22     23     24     89     90     91     92
  93     94     95     96   8447   8448   8449   8450   8451   845
 8453   8454   8488   8489   8490 164624 164625 164626 164627 164628
 164629

 13     14     15     16     17     18     19     20     21     22
 23     24     25     26     27     28     91     92     93     94
 95     96     97     98   8449   8450   8451   8452   8453   8454
8455   8456   8488   8489   8490   8491 164626 164627 164628 164629
164630 164631 164632 164633 164666 164667 164668

17     18     19     20     21     22     23     24     25     26
 27     28     29     30     31     32     93     94     95     96
 97     98     99    100   8451   8452   8453   8454   8455   8456
8457   8458   8489   8490   8491   8492 164628 164629 164630 164631
164632 164633 164634 164635 164666 164667 164668

21     22     23     24     25     26     27     28     29     30
 31     32     33     34     35     36     95     96     97     98
 99    100    101    102   8453   8454   8455   8456   8457   8458
8459   8460   8490   8491   8492   8493 164630 164631 164632 164633
164634 164635 164636 164667 164668 164669 164670

私はこのファイルを生成しているので、とにかく簡単にするために変更できます。

私はもう試した -

readlines genfromtxt loadtxt

最初のエントリは次のようになります。

9 10 11 12 13 14 15 16 17 18

とは対照的に:

9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 89 90 91 92 93 94 95 96 8447 8448 8449 8450 8451 845 8453 8454 8488 8489 8490 164624 164625 164626 164627 164628 164629

これは、出力ファイルを生成するために使用されるコードです。

for i in c_array:
n_array = []
for j in i:     
    for k in range(8):
        a = []
        sorted_c_array = sorted_c_arrays[k]
        c_col = sorted_c_array[:,k]
        b = (binarySearch(c_col,j,sorted_c_array))
        if b == True: 
            n_array.append(np.array(a))
        else:
            continue
n_array = np.reshape(n_array,(1,(np.size(n_array))))
n_array = np.unique(n_array)
output.writelines(str(n_array).replace(']',']\n')) code here

これを使用して:

c_array = []
a = []
for l in file("C:/Users/09432191/SkyDrive/Masters/python/Finished programs/Pre-  Prosessing/current_conectivity2.dat"):
line = l.strip()
if l == "\n" :
    c_array.append(a)
    a = []
a.append(line)

print c_array[0]

私は、不要な文字を取り除く方法がわかりません。

['[     9     10     11     12     13     14     15     16     17     18', '19     20     21     22     23     24     89     90     91     92', '93     94     95     96   8447   8448   8449   8450   8451   8452', '8453   8454   8488   8489   8490 164624 164625 164626 164627 164628', '164629]']
4

3 に答える 3

2

これは効率的な方法ではないかもしれませんが、見てください:

FILE = open("example.txt","r")
mystr = ""

for line in FILE:
    mystr = mystr + line

myarray = mystr.split("\n\n")
myarraylist = list()

for arraystr in myarray:
    arraystr = arraystr.strip('\n')
    arraystr = myarraylist.append(arraystr.split())

print myarraylist

これは以下を出力します:

[['9', '10', '11', '12', '13', '14', '15', '16', '17', '18', '19', '20', '21', '22', '23', '24', '89', '90', '91', '92', '93', '94', '95', '96', '8447', '8448', '8449', '8450', '8451', '845', '8453', '8454', '8488', '8489', '8490', '164624', '164625', '164626', '164627', '164628', '164629'], ['13', '14', '15', '16', '17', '18', '19', '20', '21', '22', '23', '24', '25', '26', '27', '28', '91', '92', '93', '94', '95', '96', '97', '98', '8449', '8450', '8451', '8452', '8453', '8454', '8455', '8456', '8488', '8489', '8490', '8491', '164626', '164627', '164628', '164629', '164630', '164631', '164632', '164633', '164666', '164667', '164668'], ['17', '18', '19', '20', '21', '22', '23', '24', '25', '26', '27', '28', '29', '30', '31', '32', '93', '94', '95', '96', '97', '98', '99', '100', '8451', '8452', '8453', '8454', '8455', '8456', '8457', '8458', '8489', '8490', '8491', '8492', '164628', '164629', '164630', '164631', '164632', '164633', '164634', '164635', '164666', '164667', '164668'], ['21', '22', '23', '24', '25', '26', '27', '28', '29', '30', '31', '32', '33', '34', '35', '36', '95', '96', '97', '98', '99', '100', '101', '102', '8453', '8454', '8455', '8456', '8457', '8458', '8459', '8460', '8490', '8491', '8492', '8493', '164630', '164631', '164632', '164633', '164634', '164635', '164636', '164667', '164668', '164669', '164670']]
于 2013-11-06T10:53:18.633 に答える
0

このデータを読み取る簡単な方法は、行ごとに読み取り、値を配列に蓄積することです。これを「行」と呼びましょう。次に、空の行を読み取ると、行を結果配列に追加し、現在の「行」をクリアします。ファイルが空行で終わっていない場合を処理したい場合は、そのケースを明示的に処理する必要があります。

res = []
row = []
for l in file('/tmp/data.txt'):
    line = l.strip().split()
    if not line:
        res.append(row)
        row = []
    else:
        row.extend(line)
res.append(row)

print res

必要に応じて、データをメモリにロードする代わりに、スキャン中にデータを使用できます。プログラムの他の部分がデータ全体をメモリにロードするかどうかを決定できるようにし、データの読み取り方法を変更する必要がない簡単な方法は、Python ジェネレータを使用することです。

def parseRows(f):
    res = []
    row = []
    for l in file('/tmp/data.txt'):
        line = l.strip().split()
        if not line:
            yield row
            row = []
        else:
            row.extend(line)


for r in parseRows('/tmp/data.txt'):
    print r

parseRows の結果は「ジェネレーター」であり、リストであるかのように反復できますが、その値を遅延して計算します。

于 2013-11-06T11:32:04.100 に答える