Soy un Python completo noob. ¿Cómo puedo eliminar a dos personajes desde el principio de cada línea en un archivo? Yo estaba tratando de hacer algo como esto:

#!/Python26/

import re

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

i=0;
for line in lines:
    line = line.strip()     
    #do something here
  • Usted debe leer el tutorial (docs.python.org/tutorial). Lo que tu estabas buscando está justo en la introducción (vea las «cadenas»).
InformationsquelleAutor rjuuser | 2009-08-13

12 Comentarios

  1. 76

    Que se fuera a un buen comienzo. Pruebe esto en su bucle:

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

    La [2:] se llama «rebanada de sintaxis», que esencialmente dice: «dame la parte de esta secuencia que comienza en el índice 2 y continúa hasta el final (ya que no hay un punto final fue especificado después de los dos puntos).

    • +1 para proporcionar la respuesta en el contexto de la pregunta y para el principiante nivel de explicación.
  2. 10

    Lugar de utilizar un bucle for, usted podría estar más feliz con una lista de comprensión:

    [line[2:] for line in lines]

    Sólo como una curiosidad, hacer ver la cut unix herramienta.

    $ cut -c2- filename

    La segmentación de la sintaxis de c es muy similar a la de python.

  3. 10

    Solo como una sugerencia, puede acortar su programa para

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

    Y si usted necesita para llevar el número de línea también, el uso de

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

    Si desea modificar el contenido de un archivo, no sólo el proceso de la cadena, intente fileinput‘s inplace parámetro:

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

    A continuación, en la línea de comandos:

    python strip_2_chars.py m:\file.txt
  5. 3

    Puede ser interesante saber que hay una sutil pero importante diferencia entre:

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

    y

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

    La primera solución (con readlines) va a cargar todo el contenido del archivo en la memoria y devolver una lista de python (de cadenas). Por otro lado, la segunda solución hace uso de algo que se llama un iterator. Esta en el hecho de mover el puntero en el archivo según sea necesario y devolver una cadena. Esto tiene una ventaja importante: El archivo no está cargado en la memoria. Para archivos pequeños, ambos enfoques son OK. Pero mientras que sólo el trabajo con el archivo línea por línea, yo sugiero utilizar el iterador de conducta directamente.

    Así que mi solución sería:

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

    Llegado a pensar en ello: Si no es un archivo ascii (por ejemplo latin-1 codificado), considere el uso de códecs.abierto. De lo contrario, usted puede tener una sorpresa desagradable, como de forma accidental, puede cortar un juego de caracteres multibyte en la mitad 😉

    Sin embargo, si usted no necesita python, y la única cosa que usted necesita hacer es recortar los dos primeros caracteres del archivo, entonces la manera más eficiente de hacerlo es kch la sugerencia y el uso cut:

    cat filename | cut -d2- > newfile

    Para estos tipos de rápido y sucio operaciones de archivo, siempre me han cygwin instalado en mi no-linux boxeo. Pero creo que hay un conjunto de binarios windows para estas herramientas, así que iba a realizar más rápido que en cygwin iirc.

  6. 1

    Encontrarás python tiene algunas grandes maneras de lidiar con cadenas. Algunos otros útiles de la cadena de métodos que usted puede ser que desee comprobar hacia fuera son como los de split(), replace(), y startswith()/endswith().

  7. 0

    Ya que están aprendiendo Python, me gustaría añadir que, dado que las herramientas que ofrece Python (corte, la división, la sustitución y todas las otras que se han de mencionar), usted encontrará que para muchas tareas regex son una exageración. Así que el

    import re

    al principio de su ejemplo puede o puede no ser estrictamente necesario.

  8. -1

    No muy eficiente, pero sí lo hace el trabajo. Se ve bastante complejo.

    print line[-(len(line)-2):]
    • ¿Por qué no dar una respuesta?
    • no dar respuesta a sus justos dat parece complejo
    • Por favor explique la lógica pura de codificación está involucrado. ¿Qué hace su fragmento de código que hacer, y cómo se resuelve el problema. Desde el OP es nuevo en python esto le ayudará a entender el código mejor.

Dejar respuesta

Please enter your comment!
Please enter your name here