Подтвердить что ты не робот

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

Я полный Python noob. Как удалить два символа с начала каждой строки в файле? Я пытался что-то вроде этого:

#!/Python26/

import re

f = open('M:/file.txt')
lines=f.readlines()

i=0;
for line in lines:
    line = line.strip()     
    #do something here
4b9b3361

Ответ 1

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

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

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

Ответ 2

String slicing поможет вам:

>>> a="Some very long string"
>>> a[2:]
'me very long string'

Ответ 3

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

[line[2:] for line in lines]

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

$ cut -c2- filename

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

Ответ 4

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

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

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

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

Ответ 5

Если вы хотите изменить содержимое файла, а не просто обрабатывать строку, попробуйте параметр 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

Ответ 6

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

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

и

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

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

Итак, мое решение будет:

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

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

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

cat filename | cut -d2- > newfile

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

Ответ 7

line = line[2:]

Ответ 8

for line in open("file"):
    print line[2:]

Ответ 9

Вы найдете, что у python есть отличные способы справиться со строками. Некоторые другие полезные методы, которые вы, возможно, захотите проверить, такие, как split(), replace() и startswith()/endswith().

Ответ 10

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

Ответ 11

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

import re

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

Ответ 12

Не очень эффективный, но да, он действительно работает. Выглядит довольно сложно.

print line[-(len(line)-2):]