2017-10-07 71 views
1

我有一個.txt文件,其中包含需要提取到列表中的數據。 一個典型的行看起來像:Python - 拆分整個文本文件

Sfc. W.Dir  -  -  242  240  237  241  246  248  246  249  253  254  257  266  262  269  284  283  283  290  291  295  292  287  290  293  291 Sfc. W.Dir 

整個文件looks like this

我該如何將它分解成只包含數字的文本文件?即這個例子中的行只是242 240 237 241等。前幾行不包含數據,所以我只需要8-23行。

+0

這是很多解析。你有什麼嘗試? – pstatix

+0

至少,發佈幾行生成的行(它們應該如何顯示)如果您不能編寫代碼 - 手動編寫預期結果 – RomanPerekhrest

回答

1
value_lists = [] 

file_ = <put name here> 
start_line = <line start> 
end_line = <line end> 

with open(file_) as data: 
    for i, v in enumerate(data.readlines()): 
     if start_line <= i <= end_line: 
      value_lists += [[]] 
      for val in v.split(): 
       try: 
        value_lists[i-start_line].append(float(val)) 
       except ValueError: 
        pass 

似乎在數據集上運行代碼後返回正確的結果。 n'th index,與文件相關,與列表上的第n個索引相同。

注:Python的2.7.14和Python 3.6.2測試,返回相同的結果

注:如果代碼返回額外的列表,從管線中移除1開始&結束變量。通常應該修復它

+0

添加了一點,將其寫入文件,效果很好,謝謝! – Harry

2

這樣做。

fp = open("file") 
for i, line in enumerate(fp): 
    if i>=8 and i<=23: 
     print [int(s) for s in line.split() if s.isdigit()] 
fp.close() 

如果你想這樣做,只爲您的進一步使用文字處理的一部分,那麼我建議你使用的文件處理工具,如awksed

$ awk 'FNR>=8 && FNR<=23 {gsub(/[^0-9 ]/,""); $1=$1; print $0}' file 

0 0 0 0 30 82 116 195 217 231 241 248 251 249 244 234 220 200 171 129 31 0 0 0 0 
1773 1806 1801 1795 558 1147 1258 1589 1711 1747 1796 1839 1865 1872 1863 1828 1780 1709 1582 1413 1023 1831 1507 1327 1199 
356 356 356 356 356 356 356 356 356 699 820 887 915 907 866 760 356 356 356 356 356 356 356 356 356 
175 356 356 356 356 356 356 356 815 987 1060 1121 1166 1188 1187 1166 1113 1030 891 356 356 356 356 356 356 356 175 
99900 99900 99900 3486 4258 2745 4503 10000 10000 10000 10000 10000 10000 10000 10000 10000 10000 10000 10000 10000 10000 10000 10000 99900 99900 
2 1436 1428 1416 1414 1427 1454 1488 1583 1625 1652 1679 1699 1715 1725 1724 1719 1708 1685 1660 1629 1585 1491 1369 1326 1299 2 
2 1397 1394 1379 1358 1346 1338 1315 1296 1266 1249 1234 1218 1203 1193 1187 1186 1190 1199 1206 1211 1223 1238 1232 1226 1219 2 
10207 10207 10209 10209 10209 10210 10210 10210 10209 10209 10209 10209 10208 10205 10202 10200 10198 10196 10194 10193 10193 10192 10192 10191 10192 
198 200 201 203 202 201 199 197 197 196 196 195 195 194 193 193 193 193 193 192 191 187 184 184 183 
13 13 13 13 12 13 13 14 14 14 14 14 15 15 15 15 15 14 14 14 12 11 12 12 11 
19 19 19 19 12 15 15 15 16 16 16 16 16 16 16 16 16 16 16 15 14 17 17 16 16 
206 207 208 209 202 202 200 199 200 199 199 199 198 198 198 197 197 197 196 196 194 202 200 199 199 
2 2 2 2 2 3 2 3 3 3 3 3 3 3 3 3 3 3 2 2 2 2 2 2 2 
1249 1303 1287 1199 134 317 204 95 67 209 327 433 536 611 648 671 659 615 622 670 864 322 437 448 430 
1 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 1 
000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000