какую платформу Python использовать?

Этот код занял около двух секунд, чтобы запустить 150000 записей с примерно 3000, равными США.

Вам нужно будет изменить его в соответствии с вашими настройками. например: названия различных рабочих листов; диапазоны ячеек, если ваши таблицы не начинаются с A1, немного другой синтаксис, если ваши данные в Excel Tables, а не просто диапазоны и т. д.

Используется встроенный автофильтр Excel [ 1111]

В листе назначения есть все строки, кроме тех, которые имеют США.

Option Explicit
Sub noUS()
    Dim wsSrc As Worksheet, wsDest As Worksheet
    Dim rSrc As Range, rDest As Range
    Const filterColumn As Long = 4 'Change to 12 for column L
    Dim LRC() As Long

Set wsSrc = Worksheets("sheet1")
Set wsDest = Worksheets("sheet2")
    Set rDest = wsDest.Cells(1, 1)
    wsDest.Cells.Clear

With wsSrc
'get last row and column of the source worksheet
    LRC = LastRowCol(.Name)

'set the range
    Set rSrc = .Range(.Cells(1, 1), .Cells(LRC(0), LRC(1)))

'set the filter
  'first turn it off
  .AutoFilterMode = False

  'now set it for the range
  rSrc.AutoFilter _
    field:=filterColumn, _
    Criteria1:="<>US", _
    visibledropdown:=False

  End With

  Set rSrc = rSrc.SpecialCells(xlCellTypeVisible)
  rSrc.Copy rDest

  'turn off the autofilter
  wsSrc.AutoFilterMode = False
End Sub

'--------------------------------------------
Private Function LastRowCol(Worksht As String) As Long()
Application.Volatile
    Dim WS As Worksheet, R As Range
    Dim LastRow As Long, LastCol As Long
    Dim L(1) As Long
Set WS = Worksheets(Worksht)
With WS
    Set R = .Cells.Find(what:="*", after:=.Cells(1, 1), _
                    LookIn:=xlValues, searchorder:=xlByRows, _
                    searchdirection:=xlPrevious)

    If Not R Is Nothing Then
        LastRow = R.Row
        LastCol = .Cells.Find(what:="*", after:=.Cells(1, 1), _
                    LookIn:=xlValues, searchorder:=xlByColumns, _
                    searchdirection:=xlPrevious).Column
    Else
        LastRow = 1
        LastCol = 1
    End If
End With

L(0) = LastRow
L(1) = LastCol
LastRowCol = L
End Function

И если вы хотите иметь отдельный лист с US строками, вы можете вставить следующее до конца Sub:

'now get the US rows
With wsSrc
    Set rSrc = .Range(.Cells(1, 1), .Cells(LRC(0), LRC(1)))
    .AutoFilterMode = False

    rSrc.AutoFilter _
        field:=filterColumn, _
        Criteria1:="US", _
        visibledropdown:=False

    Set rSrc = rSrc.SpecialCells(xlCellTypeVisible)
    rSrc.Copy rUS
    .AutoFilterMode = False
End With

I предпочитаю сохранять исходные данные, а не удалять материал из источника. Но, если хотите, после того, как вы сделали вышеупомянутое, и вы довольны результатом, просто удалите wsSrc

Редактировать

Приведенный выше код был изменен, так что вы получите, что я думаю, что вы хотите, это рабочие листы («Штат»), содержащие все неамериканские товары; и рабочие листы («Из TaxWise»), содержащие все предметы из США.

Вместо того, чтобы удалять несмежные строки, очень медленный процесс, мы фильтруем строки, которые мы хотим, к новому рабочему листу; удалите исходный лист и переименуйте новый лист.

Не пытайтесь делать это дома без резервного копирования ваших исходных данных.

<час>
Option Explicit
Sub noUS()
    Dim wsSrc As Worksheet, wsDest As Worksheet, wsUS As Worksheet
    Dim rSrc As Range, rDest As Range, rUS As Range
    Const filterColumn As Long = 12
    Dim LRC() As Long

Set wsSrc = Worksheets("From TaxWise")
Set wsDest = Worksheets("State")
    Set rDest = wsDest.Cells(1, 1)
    wsDest.Cells.Clear

With wsSrc
'get last row and column of the source worksheet
    LRC = LastRowCol(.Name)

'set the range
    Set rSrc = .Range(.Cells(1, 1), .Cells(LRC(0), LRC(1)))

'set the filter
  'first turn it off
  .AutoFilterMode = False

  'now set it for the range
  rSrc.AutoFilter _
    field:=filterColumn, _
    Criteria1:="<>US", _
    visibledropdown:=False

  End With

  Set rSrc = rSrc.SpecialCells(xlCellTypeVisible)
  rSrc.Copy rDest

  'turn off the autofilter
  wsSrc.AutoFilterMode = False

  'now get the US rows, may need to add worksheet
On Error Resume Next
Set wsUS = Worksheets("US")
    If Err.Number = 9 Then
        Worksheets.Add
        ActiveSheet.Name = "US"
    End If
Set wsUS = Worksheets("US")
    Set rUS = wsUS.Cells(1, 1)

With wsSrc
    Set rSrc = .Range(.Cells(1, 1), .Cells(LRC(0), LRC(1)))
    .AutoFilterMode = False

    rSrc.AutoFilter _
        field:=filterColumn, _
        Criteria1:="US", _
        visibledropdown:=False

    Set rSrc = rSrc.SpecialCells(xlCellTypeVisible)
    rSrc.Copy rUS
    .AutoFilterMode = False
End With

'Delete Taxwise and rename US sheets
Application.DisplayAlerts = False
wsSrc.Delete
wsUS.Name = "From TaxWise"
Application.DisplayAlerts = True

End Sub

'--------------------------------------------
Private Function LastRowCol(Worksht As String) As Long()
Application.Volatile
    Dim WS As Worksheet, R As Range
    Dim LastRow As Long, LastCol As Long
    Dim L(1) As Long
Set WS = Worksheets(Worksht)
With WS
    Set R = .Cells.Find(what:="*", after:=.Cells(1, 1), _
                    LookIn:=xlValues, searchorder:=xlByRows, _
                    searchdirection:=xlPrevious)

    If Not R Is Nothing Then
        LastRow = R.Row
        LastCol = .Cells.Find(what:="*", after:=.Cells(1, 1), _
                    LookIn:=xlValues, searchorder:=xlByColumns, _
                    searchdirection:=xlPrevious).Column
    Else
        LastRow = 1
        LastCol = 1
    End If
End With

L(0) = LastRow
L(1) = LastCol
LastRowCol = L
End Function
9
задан Jonik 10 June 2009 в 17:58
поделиться

10 ответов

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

10
ответ дан 4 December 2019 в 07:15
поделиться

web.py?

Это чрезвычайно просто, и Python'y. Основное привет мировое веб-приложение..

import web

 urls = (
     '/(.*)', 'hello'
  )

class hello:        
    def GET(self, name):
        i = web.input(times=1)
        if not name: name = 'world'
        for c in range(int(i.times)):
            print 'Hello,', name+'!'

if __name__ == "__main__": web.run(urls, globals())

именно.

Я нашел, что Django вызвал много конвенций самих по себе и размещения кода, и я никогда не мог помнить импорт промежуточного программного обеспечения/ярлыков и все другие "волшебство", которое в значительной степени требуется, чтобы писать что-либо. Я нашел, что это было ближе к Ruby on Rails, чем веб-платформа Python.

С web.py можно записать все, функционирующее веб-приложение, не используя ни одного из модулей помощника web.py - единственная вещь, которую необходимо сделать, import web и установите URL, который довольно неизбежен. (последняя строка в примере выполняет веб-сервер разработки),

Это имеет много материала в нем, как база данных API, помощники формы, механизм шаблонной обработки и так далее, но это не вынуждает их на Вас - Вы могли сделать весь свой вывод HTML print "Using <b>%s</b>" % (" string formating ".strip()) если Вы желали!

О, в то время как я подчеркнул, что простота, web.py - то, в чем записан http://reddit.com, таким образом, это также доказано очень способным/надежным. Кроме того, это сообщение web.py автора является очень хорошим объяснением того, почему я очень предпочитаю web.py по Django

11
ответ дан 4 December 2019 в 07:15
поделиться

DanJ, вот довольно хороший список всех известных платформ Python: http://wiki.python.org/moin/WebFrameworks

Я рекомендовал бы смотреть на статьи Википедии для Django, Turbogears, Опор, и т.д. [Я написал статью о web.py однажды, но это было удалено :-(] Они объясняют философские и различия компонента между платформами вполне прилично.

Лично, мне нравится TurboGears много, так как он основан на известных компонентах, CherryPy (для веб-обслуживания и маршрутизации URL), Kid (для шаблонов), и SQLObject (для объектно-реляционного отображения). Мне нравится этот, они сопротивлялись убеждению к "самокрутке" для всех компонентов, и я чувствую, что результатом является очень Pythonic и легкий начать с.

Но необходимо посмотреть на некоторые примеры кода и учебные руководства, и решить то, что подходит Вам лучше всего.

3
ответ дан 4 December 2019 в 07:15
поделиться

Необходимо также смотреть на web2py, который имеет хорошие документы и является очень хорошей платформой для создания wep приложения.

1
ответ дан 4 December 2019 в 07:15
поделиться

Django удивительно хорош. Guido использует его (работающий в Google). Это - главная причина, почему я работаю больше в Python, чем в Lua.

3
ответ дан 4 December 2019 в 07:15
поделиться

Вы могли бы хотеть посмотреть на Karrigell. Это имеет несколько опций для программирования синтаксиса, например, чистого Python, чистый HTML w/сценарии Python, комбинация, и т.д. Я не знаю, как хорошо это масштабируется, потому что я не использовал его в течение нескольких лет, но это хорошо для получения Ваших ног влажные w/веб-платформы.

1
ответ дан 4 December 2019 в 07:15
поделиться

Повторяя ответ немногих, я предлагаю Django. по некоторым простым причинам:

  1. Это следует за стандартной архитектурой MVC.
  2. Можно построить целое приложение из модулей прямо от моделирования дб.
  3. Обширная документация и бесплатные онлайн основанные на примере/проекте доступные книги.
  4. Много веб-проектов с открытым исходным кодом для доступной ссылки.
1
ответ дан 4 December 2019 в 07:15
поделиться

Я предполагаю, что Вы говорите о веб-платформе. Я использовал CherryPy и нашел это довольно полезным. Попытайтесь использовать каждого, чтобы кодировать простое решение и видеть, сколько оно выравнивает с Вашим стилем программирования.

0
ответ дан 4 December 2019 в 07:15
поделиться

Я записал веб-приложения с сырыми данными wsgi. Возможно, развертывая мою собственную библиотеку в какой-то момент. Я не делаю точно так же, как приблизительно большие платформы и такой. Я учился ненавидеть http при записи в сырых данных wsgi. Вам действительно не нравится он после понимания, сколько глупого парсинга и интерпретации необходимо загрузить файл.

Из-за wsgi Python имеет тонны платформ различных качеств. Если бы Вы хотите попробовать мой путь, я предположил бы, что требуется знать werkzeug, возможно. Это обеспечивает некоторые вещи, когда Вы еще не знаете, как сделать их. Это только имеет, возможно, слишком много 'платформы' для меня. В конце очень хорошо записанная платформа должна превысить то, что я записал в wsgi все же.

0
ответ дан 4 December 2019 в 07:15
поделиться

Wekrzeug также заслуживает упоминания. Это не полноценный веб-фреймворк. Это структура WSGI низкого уровня. ( 30-минутный экранный ролик вики )

1
ответ дан 4 December 2019 в 07:15
поделиться
Другие вопросы по тегам:

Похожие вопросы: