Как удалить два символа с начала строки
Я полный 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
Ответы
Ответ 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):]