-3

有很多问题与我的几乎相同,但我仍然无法让它发挥作用。我想读取文件并获取相关信息。我正在尝试使用 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:日期/时间:2002:05:19 18:10:03

为什么我不能只拆分:以及空格和换行符?

4

2 回答 2

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'
于 2013-09-30T12:16:49.507 回答
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)
于 2013-09-30T12:22:42.133 回答