0
votes

Écrire à une rangée spécifique en CSV selon Query Python

J'essaie de rechercher une valeur dans mon fichier CSV et si je le trouve, écrivez une valeur à la fin de sa ligne. Par exemple, si le CSV ressemble à ceci: xxx

et je cherche 111 et je veux écrire 0 dans la première cellule vide de sa ligne, comment puis-je le faire? < / p>


4 commentaires

Vous voulez donc 111 1 comme étant comme 111 1 0 ou 111 0 ? Et chaque ligne n'aura que deux valeurs? séparé par espace ?


Non non, je veux que ce soit 111 1 0, ce qui signifie que la ligne aura maintenant 3 valeurs


@Hamzaahmad première cellule vide : quel est le séparateur? Onglet ou espace?


À propos, pourquoi utilisez-vous WhitSpace comme délimiteur de terrain dans une CSV?


3 Réponses :


1
votes

Il n'y a aucun moyen d'insérer des données au milieu d'un fichier. L'écriture au milieu d'un fichier écrasera les données à cette position. Au lieu de:

  • Ouvrez le fichier en mode lecture li>
  • Lire toutes les données du fichier li>
  • Fermer le fichier li>
  • rouvrez le fichier en mode d'écriture li>
  • Écrivez les premières lignes li>
  • Écrivez vos données supplémentaires li>
  • Écrivez le reste des données d'origine li> ul>

    Exemple: P>

    with open('test.csv') as f:
    l = f.readlines()
    
    l[4] += '0'
    with open('test2.csv', 'w') as f:
        f.writelines(l)
    


2 commentaires

@jarmod Vous avez raison, mais cela écrasera les données existantes dans cette position. Je vais changer le texte de réponse


En tant que Sidenote: Pour de très volumineux fichiers, au lieu de réécrire les premières lignes, vous voudrez peut-être chercher à la position correcte. Mais pour la plupart des fichiers modérément dimensionnés, l'approche de cette réponse fera.



0
votes
with open('text.csv', 'r') as f:
    rows = [x.split() for x in f]
with open('text_1.csv', 'w') as f:
    for row in rows:
        f.write(row[0] + " " + row[1])
        if row[0] == '111': # or you can check for multiple values here.
            f.write("0")
        f.write("\n")


4 commentaires

L'approche x.split () pour analyser les fichiers CSV est une mauvaise idée. Le format CSV est plus délicat que vous ne le pensez. Au lieu de cela, il est préférable d'utiliser le package CSV intégré.


Ou: lignes = [x.split () pour x en ouvert ("text.csv ')]


@RJE Pouvez-vous s'il vous plaît expliquer pourquoi fractionné peut échouer. Je ne sais pas / rencontré des problèmes majeurs avec elle. Voulais savoir.


Il y a plusieurs raisons. On est que vous pourriez avoir un champ cité contenant un délimiteur. Dans ce cas, votre méthode pourrait échouer.



0
votes

Cela vous permettra d'ouvrir, lire et écrire dans le fichier dans un seul gestionnaire de contexte dans un coup. xxx


0 commentaires