0
votes

Comment modifier un fichier texte?

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 xxx pré>

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 commentaires

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 (',') 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.


8 Réponses :


0
votes

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:]}')


0 commentaires

2
votes

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: xxx


2 commentaires

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.



0
votes

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)


0 commentaires

0
votes

Autre moyen: xxx

sortie: xxx


0 commentaires

0
votes

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))


0 commentaires

0
votes

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. xxx


2 commentaires

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:] retourne une sous-chaîne à partir du caractère A'th jusqu'à la fin de la chaîne (ex: 'Hello' [3:] # retourne 'lo' ), alors j'ai utilisé cela pour extraire les cols 2 et 3 en trouvant la première position de la virgule



0
votes

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))


0 commentaires

0
votes

Ce module fonctionne également: xxx

supposant qu'il y ait un fichier.txt avec texte: xxx


0 commentaires