питонный способ доступа к данным в файловых структурах - PullRequest
1 голос
/ 18 августа 2011

Я хочу получить доступ к каждому значению (~ 10000) в файлах .txt (~ 1000), хранящихся в каталогах (~ 20), наиболее эффективным способом. Когда данные собираются, я бы хотел поместить их в строку HTML. Я делаю это для того, чтобы отобразить HTML-страницу с таблицами для каждого файла. Псевдо:

    fh=open('MyHtmlFile.html','w')
    fh.write('''<head>Lots of tables</head><body>''')
    for eachDirectory in rootFolder:

        for eachFile in eachDirectory:
            concat=''

            for eachData in eachFile:
               concat=concat+<tr><td>eachData</tr></td>
            table='''
                  <table>%s</table>
                  '''%(concat)
        fh.write(table)
    fh.write('''</body>''')
    fh.close()

Должен быть лучший способ (я думаю, это заняло бы вечность)! Я проверил set () и прочитал немного о хеш-таблицах, но лучше спросить экспертов перед тем, как вырыть дыру.

Спасибо за ваше время! / Karl

Ответы [ 2 ]

3 голосов
/ 18 августа 2011
import os, os.path
# If you're on Python 2.5 or newer, use 'with'
# needs 'from __future__ import with_statement' on 2.5
fh=open('MyHtmlFile.html','w')
fh.write('<html>\r\n<head><title>Lots of tables</title></head>\r\n<body>\r\n')
# this will recursively descend the tree
for dirpath, dirname, filenames in os.walk(rootFolder):
    for filename in filenames:
        # again, use 'with' on Python 2.5 or newer
        infile = open(os.path.join(dirpath, filename))
        # this will format the lines and join them, then format them into the table
        # If you're on Python 2.6 or newer you could use 'str.format' instead
        fh.write('<table>\r\n%s\r\n</table>' % 
                     '\r\n'.join('<tr><td>%s</tr></td>' % line for line in infile))
        infile.close()
fh.write('\r\n</body></html>')
fh.close()
1 голос
/ 18 августа 2011

Почему вы "представляете, что это займет вечность"?Вы читаете файл, а затем распечатываете его - это почти единственное, что у вас есть в качестве требования - и это все, что вы делаете.Вы можете настроить скрипт несколькими способами (читать блоки, а не строки, настраивать буферы, распечатывать вместо конкатенации и т. Д.), Но если вы не знаете, сколько времени вы сейчас занимаете, как вы узнаете, что это такое?лучше / хуже?

Сначала профиль, затем найдите, если скрипт слишком медленный, затем найдите место, где он медленный, и только потом оптимизируйте (или спросите об оптимизации).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...