2013-07-30 31 views
0

這是個什麼文件看起來像Python中找到的文本文件中的表列的總和

5.0000E+02 5.23744E-06 0.0006 
1.0600E+03 2.15119E-06 0.0023 
1.6900E+03 1.83529E-06 0.0035 
2.4000E+03 1.76455E-06 0.0044 
3.1900E+03 1.78831E-06 0.0050 
4.0800E+03 1.86632E-06 0.0056 
5.0800E+03 1.91086E-06 0.0061 
6.1900E+03 1.97899E-06 0.0066 <--- Get data from here... 
7.4300E+03 2.03105E-06 0.0070 
8.8400E+03 2.08666E-06 0.0074 
1.0400E+04 2.12723E-06 0.0078 
1.2200E+04 2.20352E-06 0.0081 
1.4100E+04 2.02335E-06 0.0089 
1.6400E+04 1.98286E-06 0.0094 
1.8900E+04 1.58478E-06 0.0107 
2.1700E+04 1.09529E-06 0.0133 
2.4900E+04 6.59218E-07 0.0173 
2.8500E+04 3.19703E-07 0.0250 
3.2500E+04 1.55052E-07 0.0358 
3.7000E+04 6.94320E-08 0.0542 
4.2100E+04 3.44175E-08 0.0764 
4.7800E+04 2.37904E-08 0.0944 
5.4200E+04 1.29016E-08 0.1283 
6.1400E+04 5.45355E-09 0.1770 
6.9500E+04 4.18030E-09 0.2486 
7.8700E+04 2.47747E-09 0.2629 
8.8900E+04 2.69887E-09 0.2820 
1.0100E+05 2.15937E-09 0.4286 
1.1300E+05 4.39994E-10 0.7824 
1.2800E+05 0.00000E+00 0.0000 
1.4400E+05 0.00000E+00 0.0000 
1.6300E+05 0.00000E+00 0.0000 
1.8300E+05 0.00000E+00 0.0000 
2.0700E+05 0.00000E+00 0.0000 
2.3300E+05 0.00000E+00 0.0000 
2.6300E+05 0.00000E+00 0.0000 
2.9600E+05 0.00000E+00 0.0000 <--- ...to here 
3.3300E+05 0.00000E+00 0.0000 
3.7600E+05 0.00000E+00 0.0000 
4.2300E+05 0.00000E+00 0.0000 
4.7600E+05 0.00000E+00 0.0000 
5.3600E+05 0.00000E+00 0.0000 
6.0400E+05 0.00000E+00 0.0000 
6.8000E+05 0.00000E+00 0.0000 
7.6500E+05 0.00000E+00 0.0000 
8.6100E+05 0.00000E+00 0.0000 
9.6900E+05 0.00000E+00 0.0000 
1.0900E+06 0.00000E+00 0.0000 
1.2200E+06 0.00000E+00 0.0000 
1.3800E+06 0.00000E+00 0.0000 
1.5500E+06 0.00000E+00 0.0000 
1.7500E+06 0.00000E+00 0.0000 
1.9700E+06 0.00000E+00 0.0000 
2.2100E+06 0.00000E+00 0.0000 
2.5000E+06 0.00000E+00 0.0000 
2.8000E+06 0.00000E+00 0.0000 
3.1500E+06 0.00000E+00 0.0000 
3.5400E+06 0.00000E+00 0.0000 
3.9900E+06 0.00000E+00 0.0000 
4.4900E+06 0.00000E+00 0.0000 
5.0500E+06 0.00000E+00 0.0000 
5.6800E+06 0.00000E+00 0.0000 
6.3900E+06 0.00000E+00 0.0000 
1.0000E+07 0.00000E+00 0.0000 

所以Python的腳本會得到這樣的數據:

6.1900E+03 1.97899E-06 0.0066 
7.4300E+03 2.03105E-06 0.0070 
8.8400E+03 2.08666E-06 0.0074 
1.0400E+04 2.12723E-06 0.0078 
1.2200E+04 2.20352E-06 0.0081 
1.4100E+04 2.02335E-06 0.0089 
1.6400E+04 1.98286E-06 0.0094 
1.8900E+04 1.58478E-06 0.0107 
2.1700E+04 1.09529E-06 0.0133 
2.4900E+04 6.59218E-07 0.0173 
2.8500E+04 3.19703E-07 0.0250 
3.2500E+04 1.55052E-07 0.0358 
3.7000E+04 6.94320E-08 0.0542 
4.2100E+04 3.44175E-08 0.0764 
4.7800E+04 2.37904E-08 0.0944 
5.4200E+04 1.29016E-08 0.1283 
6.1400E+04 5.45355E-09 0.1770 
6.9500E+04 4.18030E-09 0.2486 
7.8700E+04 2.47747E-09 0.2629 
8.8900E+04 2.69887E-09 0.2820 
1.0100E+05 2.15937E-09 0.4286 
1.1300E+05 4.39994E-10 0.7824 
1.2800E+05 0.00000E+00 0.0000 
1.4400E+05 0.00000E+00 0.0000 
1.6300E+05 0.00000E+00 0.0000 
1.8300E+05 0.00000E+00 0.0000 
2.0700E+05 0.00000E+00 0.0000 
2.3300E+05 0.00000E+00 0.0000 
2.6300E+05 0.00000E+00 0.0000 
2.9600E+05 0.00000E+00 0.0000 

然後,我需要的總和中央專欄。

像這樣: (1.97899E-06 + 2.03105E-06 + 2.08666E-06 + ... + 0.00000E + 00)= 1.90994E-05

只有第二列針對此問題的事項。

第一列代表時間。 第二列代表一些數據編號。 第三列代表一些隨機數字。

請幫我找出:((

+0

你的兩個*「here」s *如何定義? – poke

+2

首先,我不明白用於確定哪些行是相關的標準。其次,你有什麼嘗試?讀取文本文件,跳過行,轉換爲浮點數和求和都是Google可以使用的基本概念。除非你提供代碼,否則我們無法弄清楚你的缺點。 –

回答

2
import numpy 
data = numpy.loadtxt('filename.txt') 
print(data[7:,1].sum()) 

這可能是我已經索引換位,在這種情況下,將數據[1,7:]和()

+0

因爲它只是第二列,所以我會做類似 'data = numpy.loadtxt('filename.txt',usecols = 1)' 並且還使用'numpy .sum'爲加速。 –

+0

快速問題)你如何得到7和1?請解釋我是如何得出這些數字的? – user2632088

+0

假設您從最上面的一組數據開始,您要選擇中間列,並跳過前幾行。這些列將在第二個索引0,1,2中,其中1是中間的。行將在第一個索引中,7:從索引7開始選擇所有內容,因此它將跳過0:6,這意味着它將跳過7行。編輯:我沒有提前注意到你也想在最後跳過一些行,所以你可以使用7:100或任何適當的數字。 – gggg

2

首先,你需要打開文件要做到這一點,最好的辦法是:

with open("myfile.txt","r") as f: 
    # do stuff with file f here 

然後,你需要得到各行如果。該文件不是太大(如非常大的),您可以在所有存儲在內存中。

通過調用list(f),例如獲得線爲列表。list_of_file = list(f)

然後用lines_i_want = list_of_file[a:b]得到從a行到b行的行。

然後獲得centre_column = [float(line.split()[1]) for line in lines_i_want]的中央列(作爲花車)。

現在添加它們與total = sum(centre_column)

或者,在難以費用簡潔閱讀:

with open("myfile.txt") as f: 
    print(sum(float(i.split()[1]) for i in list(f)[a:b])) 

如果文件很大,不能被存儲在內存中,那麼你應該使用來自itertools模塊裏islice,而不是隻對列表進行切片:

與開放( 「myfile.txt的」) 打印(SUM(浮動(line.split()[1])在islice(線F,A,b)))

確保你如果需要,請在程序的頂部包含行from itertools import islice o做到這一點!

+0

'print(sum(float(i.split()[1])for i in islice(f,a,b)))''避免使用'itertools.islice'將整個文件sl到內存中。爲了提高可讀性,我會將'i'重命名爲'row'或'line'甚至只是's',因爲'i'通常用於表示一個整數。 –

+0

謝謝,我將補充 – rlms

0

首先打開文件並創建一個列表。

with open('filename.txt','rU') as f: 
    table = f.readlines() 

假設你總是標註你願意,你可以通過

bounds = [table.index(row) for row in table if len(row.split()) is not 3] 

這看你的表的每一行,並認爲要啓動和停止的地方找到邊界行。爲了讓你想總結行:

target_rows = table[bounds[0]:bounds[1]+1] 

上有界限+1 [1],因爲你要包括最後一個條目,Python中列表拼接作品不包括最後條目。要提取第二欄:

target_col = [float(row.split()[1]) for row in target_rows] 

最後得到的總和:

total = sum(target_col) 

此外,target_rows是給你要輸出的行。你可以將它輸出給你所需的輸出表:

output = [' '.join(row.split()[:3]) for row in target_rows] 
0
sum([int(s.strip().split()[1]) for s in open('exp.txt').readlines()]) 

根據字段分隔符更改拆分。 Reference.

相關問題