2017-10-07 108 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