【问题标题】:Extract Date and fie name using Regex [duplicate]使用正则表达式提取日期和文件名 [重复]
【发布时间】:2020-03-31 03:34:27
【问题描述】:

我有一个具有以下名称格式的文件,我想拆分日期时间和文件名并将其解析为 CSV 文件到不同的列
示例文件名
2019-12-05_18:02:28.801656_104_1_1575549141338.jpg

我只需要2019-12-05, 18:02:28,104, 1575549141338

如何使用正则表达式来做到这一点?感谢您的帮助和反馈

【问题讨论】:

  • 你有什么尝试达到你想要的输出吗?
  • import re filename = "2019-12-05_18:02:28.801656_104_1_1575549141338.jpg" x = re.split("_",filename) print(x)
  • 嗨,欢迎来到 StackOverflow。请参阅How to askHow to create a MCVE
  • 所以我在拆分后得到了这个输出 ['2019-12-05', '18:02:28.801656', '104', '1', '1575549141338.jpg']
  • 这是固定格式的吗?就像它会像 2019-12-05_18:02:28.801656_104_1_1575549141338.jpg 这样吗?

标签: python regex pandas


【解决方案1】:

你可以不重新分割字符串。

>>> filename = '2019-12-05_18:02:28.801656_104_1_1575549141338.jpg'
>>> filename.split('_')
['2019-12-05', '18:02:28.801656', '104', '1', '1575549141338.jpg']

它并不能完全满足您的需求。您可以更进一步,将其拆分为多个字符 ['_' 和 '.']。

>>> import re
>>> re.split("[\._]",filename)
['2019-12-05', '18:02:28', '801656', '104', '1', '1575549141338', 'jpg']

你可以更进一步,建立一个回复match the entire string

>>> re.match(r'^(\d+-\d+-\d+)_(\d+:\d+:\d+)\.\d+_(\d+)_\d+_(\d+)\.jpg$', filename).groups()
('2019-12-05', '18:02:28', '104', '1575549141338')

您可以更进一步,提取日期时间

>>> import datetime
>>> date, x, y = re.match(r'^(\d+-\d+-\d+_\d+:\d+:\d+\.\d+)_(\d+)_\d+_(\d+)\.jpg$', filename).groups()
>>> datetime.datetime.strptime(date, '%Y-%m-%d_%H:%M:%S.%f')
datetime.datetime(2019, 12, 5, 18, 2, 28, 801656)

【讨论】:

  • 感谢 Trevor 的回复。我在一个文件夹中有多个文件格式相同。如何继续读取所有文件并复制到 CSV。请告诉我如何继续。
  • 除了解析文件名之外,这是两个单独的问题。我会看看os.listdir()csv
【解决方案2】:

re

import re
res = (re.split("_", filename))
# [' 2019-12-05', '18:02:28.801656', '104', '1', '1575549141338.jpg']
date = res[0]
time = res[1].split('.', 1)[0]
info2 = res[2]
info1 = res[3]
filename = (os.path.splitext(res[-1]))[0]
print (date, time, info1, info2, filename)
#  2019-12-05 18:02:28 1 104 1575549141338

输出:

2019-12-05 18:02:28 1 104 1575549141338

没有re

import os
res = filename.split("_")
# [' 2019-12-05', '18:02:28.801656', '104', '1', '1575549141338.jpg']
date = res[0]
time = res[1].split('.', 1)[0]
info2 = res[2]
info1 = res[3]
filename = (os.path.splitext(res[-1]))[0]
print (date, time, info1, info2, filename)
#  2019-12-05 18:02:28 1 104 1575549141338

输出:

2019-12-05 18:02:28 1 104 1575549141338

链接:

https://docs.python.org/3/library/stdtypes.html

https://docs.python.org/3/library/re.html

【讨论】:

    【解决方案3】:

    您可以在不使用正则表达式的情况下做到这一点。

    filename =  '2019-12-05_18:02:28.801656_104_1_1575549141338.jpg'
    date1 = filename.split('_')[0]
    time1 = filename.split('_')[1].split('.')[0]
    number2 = filename.split('_')[2]
    number1 = filename.split('_')[-1].split('.')[0]
    

    或作为单行,

    extract1 = filename.split('_')[0] + '_' +filename.split('_')[1].split('.')[0] +'_' + filename.split('_')[2]+'_' + filename.split('_')[-1].split('.')[0]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-10-25
      • 2018-10-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多