0
votes

Comment puis-je obtenir Python pour écrire un fichier CSV de la sortie mon code?

Je suis incroyablement nouveau à Python, donc je n'ai peut-être pas la bonne terminologie ...

J'ai extrait du texte d'un fichier PDF à l'aide de PDFPLumber. Cela a été enregistré comme un objet. Le code que j'ai utilisé est: xxx

donc "cloche" est tout le texte de la première page du PDF importé. quelle sonnerie ressemble à j'ai besoin d'écrire tout ce texte comme une chaîne à un CSV . J'ai essayé d'utiliser: xxx

et xxx

tout ce que je continue à trouver quand je cherche ceci est comment créer un CSV avec caractères ou chiffres spécifiques, mais rien d'une sortie d'un code déjà exécuté. Par exemple, je peux obtenir le code ci-dessus: xxx

pour créer un CSV qui a "cloche" dans une cellule de la CSV, mais c'est aussi proche que je peux obtenir. Je me sens comme ça devrait être super facile, mais je ne peux tout simplement pas sembler de le faire fonctionner. Des pensées? S'il vous plaît et merci d'avoir aidé mon auto inexpérimenté.


6 commentaires

Nous ne savons pas ce que cloche ressemble. Pouvez-vous publier ce que impression (cloche) sortie? Ou, comme il est probable plus longtemps que nécessaire, une version parcourue?


Salut! J'ai ajouté une casquette d'écran de ce à quoi on ressemble


Cela ressemble à une seule chaîne multiligne. Pas un "Dataframe" (vous devez clarifier ce que c'est, le populaire pandas.dataframe ou autre chose). CSV est pour les données de colonne et je ne vois rien de columinaire.


Merci pour cette clarification, j'ai corrigé mon message à dire objet au lieu de Dataframe.


@Dmm. Off-sujets, mais vous devriez réellement accepter la réponse de travail à votre question. C'est une simple courtoisie et juste comment ce site fonctionne


Merci, JVDV! Je l'ai corrigé. :)


3 Réponses :


1
votes

page.extract_text () est défini comme suit: "rassemble tous les objets de caractère de la page dans une seule chaîne." qui ferait cloche juste une très longue chaîne.

Le CSV écrivirowow () attend par défaut une liste des chaînes, avec chaque élément de la liste correspondant à une seule colonne.

Votre problème principal est une inadéquation de type, vous essayez d'écrire une seule chaîne dans laquelle une liste des chaînes est attendue. Vous aurez besoin d'optimiser davantage sur votre objet cloche pour le convertir en format acceptable pour être écrit sur un CSV.

sans avoir la connaissance de ce que cloche contient ou ce que vous avez l'intention d'écrire, je ne peux pas obtenir plus précis, mais la documentation sur le module CSV de Python est très complète en termes de délimiteurs de paramètres, de dialectes , les définitions de colonne, etc. Une fois que vous avez converti Bell dans une approche appropriée des listes de chaînes, vous pouvez ensuite l'écrire à un CSV.


4 commentaires

Je suis retourné et j'ai ajouté un screencap de quelle "cloche" ressemble à. C'est très long depuis que tout est tout le texte de la première page, alors je l'ai recadré.


Et cette capture d'écran ne fait que renforcer que cloche est une chaîne géante. Ce qui est également manquant, c'est ce que vous attendez. Votre CSV est-il destiné à avoir une seule ligne avec une seule colonne contenant la valeur de cloche ? Si tel est le cas, alors file_writer.writerow ([Bell]) avec les guillemets retirés et que vous avez terminé. Si votre structure de CSV finale prévue est plus complexe, vous devrez définir cette structure et manipuler cloche dans un python correspondant itéroureux avant d'écrire sur CSV. Une liste par ligne, un élément de liste par colonne.


D'accord, ça fait beaucoup plus de sens. Je devrai avoir des éclaircissements sur ce que je dois faire avec les CSV. (J'apprends cette technique pour ma thèse, mais sans une formation réelle, c'est une situation "apprendre comme y allue" pour moi.) Merci de m'avoir aidé, vraiment.


FWIW Vous pouvez probablement mieux comprendre cela en expérimentant l'opération en sens inverse. Prenez n'importe quelle feuille de calcul et exportez-la comme CSV. Utilisez le lecteur de CSV de Python pour lire le fichier dans la sortie par défaut (liste des listes) et inspecter la page, à la fois au niveau de la ligne et dans l'ensemble. Lorsque vous voyez ce que Python sortit chaque ligne comme par rapport au CSV d'origine, vous serez en mesure de modéliser ce que l'auteur attend lorsque vous souhaitez écrire vos données.



0
votes

Un code similaire que j'ai écrit convertit récemment un fichier séparé à l'onglet en CSV pour l'insertion dans la base de données SQLITE3:

Peut-être que cela est utile: p>

    retval = ''
    mode = 'r'
    out_file = os.path.join('input', 'listfile.csv')

    """
    Convert tab-delimited listfile.txt to comma separated values (.csv) file
    """

    in_text = open(listfile.txt, 'r')
    in_reader = csv.reader(in_text, delimiter='\t')
    out_csv = open(out_file, 'w', newline='\n')
    out_writer = csv.writer(out_csv, dialect=csv.excel)

    for _line in in_reader:
        out_writer.writerow(_line)
    out_csv.close()


1 commentaires

Mais op ne lis pas d'un CSV donc cela ne s'applique probablement pas. De côté, vous pourriez out_writer.writerws (in_reader) et éviter le "pour.



0
votes

Donc, mon problème était que je manquais le "codage =" utf-8 "" pour des caractères spéciaux et mon délimiteur doit être un espace au lieu d'une virgule. Ce qui a fini par travail était: XXX

Cependant, car beaucoup de mes fichiers PDF n'étaient pas vrais PDF mais scanns, le CSV a fini par avoir beaucoup de symboles étranges. Cela a fonctionné pendant environ la moitié des PDF que j'ai. Si vous avez de vrais PDF, ce sera génial. Sinon, j'essaie actuellement de déterminer comment extraire tout le texte en Pandas Dataframe séparés par des en-têtes dans les PDF, car pdfminer extrait parfaitement tout le texte. Merci pour tout le monde qui a aidé!


0 commentaires