Python2.7使用多个xm

2024-06-26 01:33:25 发布

您现在位置:Python中文网/ 问答频道 /正文

第一:对不起我可怜的英语能力。 第二:我已经学了几周python了,所以请耐心等待

我的项目: 我得到了一个包含多个文件(xml)的目录。在

they looks like:    
            thingy1_442354565666.xml
            thingy2_502354565666.xml
            thingy3_692354565666.xml
            etc.

filename中的数字代表文件的最后修改日期。较大的数字表示最近的文件。(这一点稍后将很重要。)

每个xml包含两个元素。在

^{pr2}$

问题是: 我需要从每个月的输出txt。在

like this:  
        jan: 1098
        feb: 499
        etc.

不幸的是,这个目录中有超过12个xml文件,所以每个月都有2-3个文件(我总是需要最后修改的文件)。在

我试图用文件名和句点元素编一本字典,但我完全失败了。 顺便说一句,我可以用elementtree等来解析xml,但我不知道如何从每个月中选择最后修改过的文件。在

请帮帮我,问问我是不是不能理解。 谢谢!在


Tags: 文件项目目录元素etc数字能力xml
1条回答
网友
1楼 · 发布于 2024-06-26 01:33:25

如果较大的数字表示较旧的文件,则对文件列表进行排序,并将文件从最小的迭代到最大的文件(即,先读取最新的文件)。在

{Parse}你已经看到了文件,并且可以忽略后续文件。在

比如:

import glob
from datetime import datetime
from lxml import etree

def file_timestamp(filepath):
    """Return the timestamp from a file name"""
    filename = os.path.split(filepath)[1]
    filename = os.path.splitext(filename)[0]
    if '_' in filename:
        return filename.split('_')[1]
    return None

class Datafiles(object):
    def __init__(self, dir_path):
        self.date_cache = {}
        self.dir_path = dir_path

    def __iter__(self):
        return self.files()

    def next(self):
        return self.files().next()

    def files(self):
        filepaths = glob.glob(self.dir_path + '*_*.xml')
        filepaths = sorted(filepaths, key=file_timestamp)

        for filepath in filepaths:
            ## Parse data (xml)
            data = self.parse_file(filepath)
            ## If year/month is seen before, skip
            date = datetime.strptime(data['period'].text, '%m%Y')
            month = (date.year, date.month)
            if month in self.date_cache:
                continue

            ## Else store date and yield
            self.date_cache[month] = filepath
            yield data

    def parse_file(self, filepath):
        # YOUR XML PARSING HERE
        return etree.parse(filepath)

用法:

^{pr2}$

相关问题 更多 >