【问题标题】:Use Regex to extract file path and save it in python使用正则表达式提取文件路径并将其保存在python中
【发布时间】:2016-02-03 21:10:18
【问题描述】:

我有一个包含大量文件路径的文本文件 file.txt:

C:\data\AS\WO\AS_WOP_1PPPPPP20070506.bin
C:\data\AS\WO\AS_WOP_1PPPPPP20070606.bin
C:\data\AS\WO\AS_WOP_1PPPPPP20070708.bin
C:\data\AS\WO\AS_WOP_1PPPPPP20070808.bin
...

我用 Regex 从路径中提取日期做了什么:

import re

textfile = open('file.txt', 'r')
filetext = textfile.read()
textfile.close()

data = []

for line in filetext:
    matches = re.search("AS_[A-Z]{3}_(.{7})([0-9]{4})([0-9]{2})([0-9]{2})", line)
    data.append(line)

它没有给我想要的。

我的输出应该是这样的:

year    month
2007     05
2007     06
2007     07
2007     08

然后将其保存为列表列表

[['2007', '5'], ['2007', '6'], ['2007', '7'], ['2007', '8']]

将其保存为熊猫系列

regex 有什么办法可以得到我想要的东西!?

【问题讨论】:

  • 你说输出不是你所期望的,但我没有看到你的代码产生任何输出。
  • textfile.read() 将文件的全部内容作为一个长字符串返回。 for line in filetext 循环遍历每个字符
  • @john-gordon 确切地说,我得到了每个字符串。而且 readline() 又给了我第一行字符的字符串

标签: python regex pandas


【解决方案1】:

您可以将您的正则表达式简化为:

/(....)(..)..\.bin$/

第 1 组有年份,第 2 组有月份。我假设该格式适用于整个文件。

现在,. 代表 任何 字符,\. 代表“点”或文字 .$ 表示在字符串的结尾。 所以,我在行尾匹配.bin,省略了日期,只对年和月进行分组。

【讨论】:

  • @amit-joki 我没明白你的意思,我是正则表达式的新手。你能扩展和解释你的代码吗
  • @Milban 我在 python 上很糟糕,很抱歉。我猜另一个答案在这方面有所帮助。
【解决方案2】:

用熊猫试试这个:

df = pd.read_csv('yourfile.txt',header=None)
df.columns = ['paths']
# pandas string method extract takes a regex
df['paths'].str.extract('(\d{4})(\d{2})')

输出:

       0    1
0   2007    05
1   2007    06
2   2007    07
3   2007    08

【讨论】:

  • 这正是我想要的,谢谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-06-03
  • 2012-03-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多