J'essaie de modifier un fichier texte à Python 3.7. Fondamentalement, j'ai un fichier texte (fichier_1.txt) contenant des numéros - 3 colonnes et 5 lignes telles que celle-ci Je voudrais éditer ce fichier afin d'obtenir quelque chose d'un peu Différents, fondamentalement, cette P> with open("file_1.txt", "r+") as file1:
file1.read()
i = 6
imax = 10
while i <= imax:
sentence = str(i) + "\n"
file1.write(sentence)
i = i + 1
8 Réponses :
court et facile. Juste 3 lignes.
with open('file_1.txt', 'r+') as f: for num, content in enumerate(f.readlines()): f.write(f'{num+6}, {content[3:]}')
S'il s'agit d'un fichier de type CSV, vous voudrez peut-être utiliser des pandas (qui est l'une des meilleures façons de la manipulation de DataFrame). Un exemple rapide:
Thx pour une suggestion. Si vous connaissez une autre manière sans ce module, j'aimerais le voir.
@ Crosimpson2.0 Il y a quelques solutions de travail sans pandas ci-dessous. Toutefois, Pandas est l'une des libs les plus puissantes (et les plus standard) (ainsi que des numpues, Scipey, etc.) pour le pipeline de données et vous devez absolument essayer de l'utiliser, car cela est de manière plus simple d'utiliser.
Pythonic-Way: Ça ajoutera les nouvelles lignes au fichier.
with open('sample.txt', 'r') as f: l = [i.strip() for i in f.readlines()] max_row = int(l[-1].split(',')[0]) x = [str(i) for i in range(max_row+1,11)] y = [i.split(',', 1)[-1] for i in l] with open('sample.txt', 'a') as f: for item in [x[i]+',' + y[i] for i in range(len(x))]: f.write("%s\n" % item)
Autre moyen: sortie: p>
Premièrement, vous devez lire toutes les données de l'entrée et stockez-la.
ensuite, passez à nouveau et écrivez-le dans le fichier. P>
data = [] with open("file_1.txt", "r+") as file1: # read the data for line in file1: # .strip() to remove the newline # .split(", ") to split into 3 values # map(int, ...) to convert each from string to integer index, column2, column3 = map(int, line.strip().split(", ")) #save the second and third coluumn data.append((column2, column3)) # now write it back again: for column2, column3 in data: index += 1 # continue incrementing the index # format the lines and write them into the file file1.write("{}, {}, {}\n".format(index, column2, column3))
Cette approche fonctionne directement avec chaque ligne sous forme de chaîne, sans diviser plus de colonnes que nécessaire.
La première pour la boucle ne s'éteint les COLS 2 et 3 (avec une virgule de premier plan) dans une liste, suivez le nombre de lignes. La deuxième boucle ajoute que cette liste incrémente index à partir du compte. P>
Salut Alex! J'allais tout au long de votre code et je ne peux pas bien comprendre. Pouvez-vous s'il vous plaît dites-moi pourquoi avez-vous écrit deux points à la ligne où vous utilisiez la méthode de la méthode?
@ Crosimpson2.0 Désolé pour le code opaque, j'espère que cette nouvelle édition est un peu meilleure. STR [A:] code> retourne une sous-chaîne à partir du caractère A'th jusqu'à la fin de la chaîne (ex:
'Hello' [3:] # retourne 'lo' code >), alors j'ai utilisé cela pour extraire les cols 2 et 3 en trouvant la première position de la virgule
Script ci-dessous construira un nouveau fichier et vous pouvez définir le nombre de lignes que vous souhaitez créer.
Tout d'abord toutes les lignes sont lues à partir du fichier d'entrée, puis il écrit le nombre de lignes que vous avez définies sur le nouveau fichier. P>
list_emitter code> peut donner des éléments à partir d'infiniment de la liste donnée, de sorte que vous pouvez simplement ajuster
sortie_lines_count code> variable pour rendre votre fichier de sortie encore plus grand. P>
def list_emitter(l):
"""This generator will endlessly yield items from given list."""
while True:
for item in l:
yield item
with open('file_1.txt') as input_file:
lines = input_file.readlines() # Create list of lines
with open('output_file.txt', 'w') as output_file:
output_lines_count = 10 # Set how many output lines you want
for counter, line in enumerate(list_emitter(lines)):
if counter == output_lines_count:
break
first, second, third = line.strip().split() # Parse line
output_file.write('{}, {} {}\n'.format(counter+1, second, third))
Ce module fonctionne également: supposant qu'il y ait un fichier.txt code> avec texte: p>
On dirait que vous venez d'ajouter des données dans le fichier. Est-ce ce que vous voulez savoir ou les «modifications» impliquent d'autres choses comme en évitant les lignes existantes ou en supprimant certaines d'entre elles.
Vous devez diviser les lignes pour obtenir les colonnes.
ligne.split (',') code> générera un vecteur avec 3 index ... Pour écrire avec 3 colonnes: Fichier1, écrire (FirstColumn + ',' + secondcolumn + ',' + tierscolumn)
J'essayais de scinder la ligne, mais j'ai eu des cordes et je ne sais pas comment faire la première colonne avec cela, il y avait aussi des problèmes d'ajout de ces valeurs à la nouvelle liste.
Je m'en fiche si j'avais un nouveau fichier (fichier_2.txt par exemple) avec ces 10 lignes et 3 colonnes, ou j'appuie 5 lignes supplémentaires au fichier existant.
@ Crosimpson2.0 S'il vous plaît voir ma réponse ci-dessous.
J'ai résolu en seulement 3 lignes de code. Voir ma réponse ci-dessous.
Merci à tous pour ces réponses! J'ai essayé de résoudre ce problème pendant une heure et que vous l'avez fait en 3 minutes! Thx encore :)
Désolé, j'avais fini tard dans la nuit, n'a pas vérifié mon code. Mes codes de 3 lignes fonctionnent juste bien maintenant.