2017-10-16 3 views
0

J'essaie d'écrire des extraits de code source de scripts et d'autres informations pertinentes dans le fichier csv, où chaque cellule contiendrait une information.Python csv writer pour écrire des extraits de code source dans une seule cellule

sortie souhaitée serait comme:

function name, number of lines, source code 
helloWorld, 3, { 
       printf("hello, world\n"); 
       } 
fooBar, 5, { 
      const char *foo = "Hello"; 
      const char *bar = "World!"; 
      fprintf(stdout, "%s %s\n", foo, bar); 
      return 0; 
      } 

où chaque extrait de code source doit être dans une seule cellule, tout en préservant la structure du code.

ci-dessous est le code:

with open('functionInformation.csv', 'wb') as csvOut: 
    csvwriter = csv.writer(csvOut, delimiter = ',') 
    csvwriter.writerow(['function name', 'number of lines', 'source code']) 
    for functionObject in functionObjectRepository: 
     csvwriter.writerow([functionObject.funcName, functionObject.numLines, functionObject.sourceCode]) 

où functionObject est l'objet avec des attributs tels que le nom de la fonction (funcName), le nombre de lignes de code (numLines), et le code source (code source) .

sortie Je reçois à droite ressemble maintenant à:

helloWorld, 3, { 
printf("hellp, world\n"); 
} 
fooBar, .... 

Répondre

1

Selon this site:

  1. sauts de ligne sont représentés par un retour chariot/saut de ligne,
  2. la chaîne doivent être enveloppés entre guillemets

Il montre alors l'exemple:

#!/usr/bin/env python2.7 

import csv 

multiline_string = "this\nis\nsome\ntext"    # assign string 
multiline_string = multiline_string.replace('\n','\r\n') # convert newlines to newlines+carriage return 

with open('xyz.csv', 'wb') as outfile: 
     w = csv.writer(outfile)       # assign csv writer method 
     w.writerow(['sometext',multiline_string])   # append/write row to file 

Cependant, le remplacement de tous les \n avec \r\n dans votre code changerait aussi ceux dans le code lui-même. Alors peut-être que vous devrez trouver une meilleure façon de faire le changement.

+0

merci pour l'exemple! cela fonctionne – user32147

+0

Avez-vous regardé pour la ligne 'fprintf (stdout,"% s% s \ n ", foo, bar);', pour voir si le '\ n' dedans est également remplacé? Comme chaque ligne de code est séparée par un point-virgule, vous devriez peut-être remplacer '; \ n' par'; \ r \ n'. – berna1111