2013-09-30 46 views
-3

這是一堆與我的幾乎相同的問題,但我仍然無法讓它工作。我想讀一個文件並獲取相關信息。我正在嘗試在python中使用正則表達式。文件在python中用正則表達式分割一個文件

副本:

 File name : tmp2.jpg 
     File size : 179544 bytes 
     File date : 2003:03:29 10:58:40 
     Camera make : Canon 
     Camera model : Canon DIGITAL IXUS 300 
     Date/Time : 2002:05:19 18:10:03 
     Resolution : 1200 x 1600 
     Flash used : Yes 
     Focal length : 11.4mm (35mm equivalent: 79mm) 
     CCD width : 5.23mm 
     Exposure time: 0.017 s (1/60) 
     Aperture  : f/4.0 
     Focus dist. : 1.17m 
     Exposure bias:-0.33 
     Metering Mode: matrix 
     Jpeg process : Baseline 

我試圖:

infile = sys.argv[1] 
    ifile = open(infile, 'r').read() 

    myInfo = re.split('\s*\n:', ifile) 

    for x in range(len(myInfo)): 

     if myInfo[x] == 'Date/Time': 
      print x 
      x = x + 1 

它所需要做的:

我需要得到這樣的信息:2002:05:19 18 :10:03 from this line:日期/時間:2002:05:19 18:10:03

爲什麼不能我的理由分裂:空間和換行符?

回答

1

你不需要正則表達式。使用str.splitstr.strip

>>> 'Date/Time : 2002:05:19 18:10:03'.split(':', 1) 
['Date/Time ', ' 2002:05:19 18:10:03'] 
>>> name, value = map(str.strip, 'Date/Time : 2002:05:19 18:10:03'.split(':', 1)) 
>>> name 
'Date/Time' 
>>> value 
'2002:05:19 18:10:03' 
+0

非常感謝您的幫助! :) – Markonan

+0

非常感謝您的幫助!但它仍然是一個問題。我需要編寫一個適用於不同文件的腳本。這些文件的構建方式與我提交副本的文件相同。但是數字是不同的。你的解決方案只適用於這個例子。有什麼想法嗎? – Markonan

+0

@ user2160022,哪些數字不同?你可以發佈另一個文件的內容嗎? – falsetru

0

我不想使用read()。您一次不需要程序中的所有數據。只需遍歷文件的每一行。

import io 
data = """  File name : tmp2.jpg 
     File size : 179544 bytes 
     File date : 2003:03:29 10:58:40 
     Camera make : Canon 
     Camera model : Canon DIGITAL IXUS 300 
     Date/Time : 2002:05:19 18:10:03 
     Resolution : 1200 x 1600 
     Flash used : Yes 
     Focal length : 11.4mm (35mm equivalent: 79mm) 
     CCD width : 5.23mm 
     Exposure time: 0.017 s (1/60) 
     Aperture  : f/4.0 
     Focus dist. : 1.17m 
     Exposure bias:-0.33 
     Metering Mode: matrix 
     Jpeg process : Baseline""" 

for line in io.StringIO(data): 
    if line.strip().startswith('Date/Time'): 
     datetime = line.split(':', 1)[1].strip() 
print(datetime) 
+0

感謝matthias!解決了 ;) – Markonan