【问题标题】:Python: read million of files and create onePython:读取数百万个文件并创建一个
【发布时间】:2015-02-23 17:55:30
【问题描述】:

好的,我开始:这不是一个经常做的过程,我不在乎一段时间后(但我需要它完成而不需要几天),并且必须在 Python 中。

我需要阅读 200 万个 html 文件 (4kb) 并对其进行检查,只需一次,然后我在 python 中创建了一个更快的程序(我今天学习 python:/)

path = './files/*.htm'   
files = glob.glob(path)   
writer = open('myfile.txt','a+')
for name in files: 
    try:
        with open(name) as f: 
            for line in f.readlines():
                result = my_logic()

            writer.write(result) #Concatenated string

writer.close()

好吧,我想当我用数百万个 htm 运行这个时,所有这些都会爆炸,我的整个办公室都会死掉。 Sooo...有什么小建议吗? 我在 Python 中完全是菜鸟,但我认为我最难用 javascript 创建它:P

编辑:

对不起,我解释了我的问题:P

这是打开文件的最佳方式吗? 我不太了解 Python,并且了解“文件”变量的大小可能很大(不知道是保存的值还是仅供参考),需要读取数百万个文件。

打开 Writer 并在整个程序中保持打开状态?每次写都省,还是程序失败就全输?

很抱歉给您带来不便

【问题讨论】:

  • 不,它不会爆炸,您一次处理一个文件,一次处理一行,我不明白这会对系统造成多大的负担。又是什么问题?
  • 除了result 没有在任何地方定义,我觉得很好。运行它,看看它是否有效 - 它可能不会爆炸。
  • 如果您知道您的代码可以正常工作,并且只想总体改进它,请尝试在Code Review 上提问。
  • 我解释了更多我的问题,很抱歉给您带来不便,感谢您的回答:D
  • 你应该把你的工作分成更多的进程来利用多核架构。确切的解决方案显然取决于你有什么可用的,但据我所知,这个操作是完全可并行化的。

标签: python file file-io


【解决方案1】:

您正在使用 readlines 创建 2000000 不必要的列表,您还需要 join 路径的名称,您有 8 gigs 的数据,所以除非您在 my_logic() 中做大量工作,否则它不会'不需要几天的时间。

path = './files/'
files = glob.glob(path)
with open('myfile.txt', 'a+') as writer:
    for name in glob.glob(path + "*.html"):
        try:
            with open(os.path.join(path, name)) as f: # join path and filename
                for line in f: # iterate over file object
                    result = my_logic()
                writer.write(result)  #Concatenated string
        except IOError as e:
            print(e)

【讨论】:

    猜你喜欢
    • 2016-08-22
    • 2021-07-11
    • 1970-01-01
    • 1970-01-01
    • 2020-03-16
    • 2016-06-12
    • 1970-01-01
    • 1970-01-01
    • 2018-12-08
    相关资源
    最近更新 更多