write txt partir lista importar funcion ejercicios crear como archivos python list split position

txt - Función de división al escribir un archivo abierto en Python



ejercicios de archivos en python (3)

El .split método de cadena .split solo puede funcionar con delimitadores simples. Sin una discusión, simplemente se divide en espacios en blanco . Para un comportamiento de división más complejo, lo más fácil es usar regex:

>>> s = "I like to code, because to code is fun. A computer''s skeleton." >>> import re >>> delim = re.compile(r"""/s|([,.;'':"])""") >>> tokens = filter(None, delim.split(s)) >>> idx = {} >>> result = [] >>> i = 1 >>> for token in tokens: ... if token in idx: ... result.append(idx[token]) ... else: ... result.append(i) ... idx[token] = i ... i += 1 ... >>> result [1, 2, 3, 4, 5, 6, 3, 4, 7, 8, 9, 10, 11, 12, 13, 14, 9]

Además, no creo que deba iterar sobre el archivo línea por línea, según sus especificaciones. Deberías hacer algo como:

with open(''my file.txt'') as f: s = f.read()

Lo cual pondrá todo el archivo como una cadena en s . Nota: nunca utilicé open antes de la declaración with , eso no tiene ningún sentido.

Esta pregunta ya tiene una respuesta aquí:

Así que tengo un programa en el que se supone que debo tomar un archivo externo, abrirlo en Python y luego separar cada palabra y cada puntuación, incluyendo comas, apóstrofes y puntos. Entonces se supone que debo guardar este archivo como las posiciones enteras de cuando aparece cada palabra y puntuación en el texto.

Por ejemplo: - Me gusta codificar, porque codificar es divertido. El esqueleto de una computadora.

En mi programa, tengo que guardar esto como:

1,2,3,4,5,6,3,4,7,8,9,10,11,12,13,14

(Ayuda para aquellos que no entienden) 1-I, 2-like, 3-to, 4-code, 5- (,), 6-because, 7-is, 8-fun 9- (.), 10- A, 11 computadoras, 12- (''), 13-s, 14-esqueleto

Así que esto ha mostrado las posiciones de cada palabra, incluso si se repite, muestra la primera posición que ocurre de la misma palabra

Perdón por la larga explicación, pero esta es mi pregunta real. He hecho esto hasta ahora:

file = open(''newfiles.txt'', ''r'') with open(''newfiles.txt'',''r'') as file: for line in file: for word in line.split(): print(word)

Y aqui esta el resultado:-

They say it''s a dog''s life,.....

Desafortunadamente, esta forma de dividir un archivo no separa las palabras de la puntuación y no se imprime horizontalmente. .split no funciona en un archivo, ¿alguien sabe de una manera más efectiva en la que puedo dividir el archivo - palabras de puntuación? Y luego almacenar las palabras separadas y la puntuación juntas en una lista?


Puedes resolver esto usando regex y split. Espero que esto te indique la dirección correcta. ¡Buena suerte!

import re str1 = ''''''I like to code, because to code is fun. A computer''s skeleton.'''''' #Split your string into a list using regex and a capturing group: matches = [x.strip() for x in re.split("([a-zA-Z]+)", str1) if x not in ['''','' '']] print matches d = {} i = 1 list_with_positions = [] #now build the dictionary entries: for match in matches: if match not in d.keys(): d[match] = i i+=1 list_with_positions.append(d[match]) print list_with_positions

Aquí está la salida. Observe que hay un período final con un puesto de # 9:

[''I'', ''me gusta'', ''hasta'', ''código'', '','', ''porque'', ''a'', ''código'', ''es'', ''diversión'', ''.'', ''A'', '' computadora '', "''", ''s'', ''esqueleto'', ''.'']

[1,2,3,3,6,6,7,7]


Use regex para capturar las subcadenas relevantes:

import re my_string = "I like to code, because to code is fun. A computer''s skeleton." matched = re.findall("(/w+)(['',.]?)", my_string) # Split up relevant pieces of text

Filtra las coincidencias vacías y agrega al resultado:

result = [] for word, punc in matched: result.append(word) if punc: # Check if punctuation follows the word result.append(punc)

Luego escribe el resultado en tu archivo:

with open("file.txt", "w") as f: f.writelines(result) # Write pieces on separate lines

La expresión regular funciona buscando caracteres alfabéticos, luego verifica si hay signos de puntuación a continuación (opcionalmente).