Как удалить два символа с начала строки

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

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

, Например, идея "клиента" может состоять из основной записи в таблице Customer, объединенной со всеми заказами, которые клиент разместил, а также сотрудники всего клиента и их контактная информация, и некоторые свойства клиента и его детей могут быть определены от справочных таблиц. Действительно хорошо с точки зрения разработки смочь работать с Клиентом как единственный объект, так как с бизнес-точки зрения, понятие о Клиенте содержит все эти вещи, и отношения могут или не могут быть осуществлены в базе данных.

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

Тем не менее, поскольку другие отметили выше, нет никакого "идеального дизайна", инструмент должен соответствовать заданию. Но использование предприятий может действительно помочь с обслуживанием и производительностью, так как Вы знаете, куда пойти для изменения бизнес-логики, и объекты могут смоделировать реальные понятия интуитивным способом.

36
задан SilentGhost 13 August 2009 в 10:28
поделиться

11 ответов

У вас было хорошее начало. Попробуйте сделать это в своем цикле:

for line in lines:
    line = line[2:]
    # do something here

Синтаксис [2:] называется " slice ", по сути, он говорит: «Дайте мне часть этой последовательности, которая начинается с индекса 2 и продолжается до конца (поскольку конечная точка не была указана после двоеточия).

79
ответ дан 27 November 2019 в 05:12
поделиться

Нарезка строк поможет вам:

>>> a="Some very long string"
>>> a[2:]
'me very long string'
21
ответ дан 27 November 2019 в 05:12
поделиться

Вместо использования цикла for вы могли бы быть более довольны пониманием списка:

[line[2:] for line in lines]

В качестве любопытства проверьте инструмент unix cut .

$ cut -c2- filename

Синтаксис нарезки для -c очень похож на синтаксис Python.

9
ответ дан 27 November 2019 в 05:12
поделиться

Если вы хотите изменить содержимое файла, а не просто обработать строку, попробуйте fileinput параметр inplace :

# strip_2_chars.py
import fileinput
for line in fileinput.input(inplace=1):
  print line[2:]

Затем, командная строка:

python strip_2_chars.py m:\file.txt
3
ответ дан 27 November 2019 в 05:12
поделиться

В качестве подсказки вы можете сократить свою программу до

for line in open('M:/file.txt'):
    line = line[2:]

. А если вам нужно перенести номер строки, используйте

for i, line in enumerate(open('M:/file.txt.')):
    line = line[2:]
10
ответ дан 27 November 2019 в 05:12
поделиться
line = line[2:]
2
ответ дан 27 November 2019 в 05:12
поделиться
for line in open("file"):
    print line[2:]
2
ответ дан 27 November 2019 в 05:12
поделиться

Просто используйте строку [2:]

0
ответ дан 27 November 2019 в 05:12
поделиться

Когда есть только один уровень наследования, вы можете использовать шаблон метода шаблон , где открытый интерфейс не является виртуальным и вызывает функцию виртуальной реализации. Затем логика базы переходит в публичную функцию, которая гарантированно будет вызвана. Я обнаружу, что в Python есть несколько отличных способов работы со строками. Некоторые другие полезные строковые методы, которые вы, возможно, захотите проверить, - это такие как split (), replace () и startwith () / endwith ().

1
ответ дан 27 November 2019 в 05:12
поделиться

Может быть интересно узнать, что есть тонкое, но важное различие между:

file = open( filename )
lines = file.readlines()
for line in lines:
   do something

и

file = open( filename )
for line in file:
    do something

Первое решение (с строками чтения ) загрузит все содержимое файла в памяти и вернуть список Python (строк). С другой стороны, второе решение использует нечто, называемое итератором . Это фактически переместит указатель в файле по мере необходимости и вернет строку. Это имеет важное преимущество: файл не загружается в память. Для небольших файлов подходят оба подхода. Но пока вы работаете с файлом только построчно, я предлагаю использовать поведение итератора напрямую.

Итак, мое решение было бы:

infile = open( filename )
outfile = open( "%s.new" % filename, "w" )
for line in infile:
    outfile.write( line[2:] )
infile.close()
outfile.close()

Подумайте об этом: если это не-ascii файл (например, в кодировке latin-1), рассмотрите возможность использования codecs.open . В противном случае вас может ждать неприятный сюрприз, поскольку вы можете случайно разрезать многобайтовый символ пополам;)

Однако, если вам не нужен python, и единственное, что вам нужно сделать, это обрезать первые два символа из файла, то самый эффективный способ сделать это - предложить kch и использовать cut :

cat filename | cut -d2- > newfile

Для таких быстрых и грязных операций с файлами у меня всегда установлен cygwin на моем не- Linux Boxen. Но я считаю, что для этих инструментов есть набор двоичных файлов Windows, которые будут работать быстрее, чем в cygwin iirc.

Предложение и использование cut :

cat filename | cut -d2- > newfile

Для таких быстрых и грязных файловых операций у меня всегда установлен cygwin на моем компьютере, отличном от Linux. Но я считаю, что для этих инструментов есть набор двоичных файлов Windows, которые будут работать быстрее, чем в cygwin iirc.

Предложение и использование cut :

cat filename | cut -d2- > newfile

Для таких быстрых и грязных файловых операций у меня всегда установлен cygwin на моем компьютере, отличном от Linux. Но я считаю, что для этих инструментов есть набор двоичных файлов Windows, которые будут работать быстрее, чем в cygwin iirc.

3
ответ дан 27 November 2019 в 05:12
поделиться

Поскольку вы изучаете Python, я хотел бы добавить это, учитывая инструменты, предлагаемые Python (нарезка, разделение, замена и все другой, о котором упоминалось), вы обнаружите, что для многих задач регулярные выражения излишни. Таким образом,

import re

в начале вашего примера может быть или не быть строго необходимым.

0
ответ дан 27 November 2019 в 05:12
поделиться
Другие вопросы по тегам:

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