【发布时间】:2021-08-21 20:50:02
【问题描述】:
我正在尝试从多个文本文件中读取数据并将数据移动到二维数组中。数据需要保持特定的顺序。
正则表达式可以帮助解决这个问题吗?
如果您对如何改进这部分代码有任何见解,请告诉我。
【问题讨论】:
-
为什么不从文件的第 3 行获取年份?
标签: python arrays text split strip
我正在尝试从多个文本文件中读取数据并将数据移动到二维数组中。数据需要保持特定的顺序。
正则表达式可以帮助解决这个问题吗?
如果您对如何改进这部分代码有任何见解,请告诉我。
【问题讨论】:
标签: python arrays text split strip
datetime module 提供(大多数)与日期相关的所有内容
from datetime import datetime
date = "Sat 30-Mar-1996 7:40 PM"
fmt = "%a %d-%b-%Y %I:%M %p"
a = datetime.strptime(date, fmt)
print(a.year)
>>> 1996
【讨论】:
您可以通过拆分其组件并使用iterable unpacking 来非常轻松地解析日期时间字符串,例如,
def parse_date(d):
day_of_week, date, hhmm, ampm = d.split()
day_of_month, month, year = date.split('-')
hour, minute = hhmm.split(':')
return (year, month, day_of_month,
hour if ampm=='AM' or str(int(hour)+12), minute,
day_of_week)
之后,在循环体中
year, m, dom, h, m, dow = parse_date(fields[-1].strip())
或者,如果您只对year感兴趣
year, *_ = parse_date(fields[-1].strip())
【讨论】:
您可能正在寻找正则表达式,这是一种非常强大的分析和提取字符串数据的方法。有关它们的介绍,我会查看 this site 或 the python docs,但在你的情况下,我认为你可能想要类似 '| ([a-zA-Z]*) ([0-9]*)-([a-zA-Z]*)-([0-9]*) ([0-9:]* [a-zA -Z]*) |'会工作。对于 100% 正确的正则表达式 [正则表达式的缩写],需要对时间格式进行更具体的描述。
要在 python 中使用正则表达式,你需要the re library。首先,使用matcher = re.compile(your_regex_string_here) 创建模式匹配器。然后,找到与result = matcher.match(file_contents) 的匹配项。 (你也可以只做result = re.match(regex_string,file_contents)。)无论你的正则表达式是什么,任何被括号包围的东西都被称为“捕获组”,可以用result.group()从结果中提取; result.group(0) 将返回完全匹配,result.group(n) 将返回第 n 个捕获组的内容 - 即第 n 组括号。在上面的示例中,result.group(4) 将返回年份,但您可以通过使用组 1-5 获得一周中的任何一天、一天、一个月、一年和时间。
另一个答案中提到的 DateTime 模块也是一个很棒的工具。
【讨论】:
datetime 模块。为这项工作使用正确的工具,而正则表达式不是这项工作的正确工具。
None。干得好。