J'essaie de tester un caractère t/a ou un espace et je ne comprends pas pourquoi ce morceau de code ne fonctionnera pas. Ce que je fais est de lire dans un fichier, en comptant le loc pour le fichier, puis en enregistrant les noms de chaque fonction présente dans le fichier avec leurs lignes de code individuelles. Le bit de code ci-dessous est où j'essaie de compter la loc pour les fonctions.str.startswith() ne fonctionne pas comme je l'ai prévu
import re
...
else:
loc += 1
for line in infile:
line_t = line.lstrip()
if len(line_t) > 0 \
and not line_t.startswith('#') \
and not line_t.startswith('"""'):
if not line.startswith('\s'):
print ('line = ' + repr(line))
loc += 1
return (loc, name)
else:
loc += 1
elif line_t.startswith('"""'):
while True:
if line_t.rstrip().endswith('"""'):
break
line_t = infile.readline().rstrip()
return(loc,name)
Sortie:
Enter the file name: test.txt
line = '\tloc = 0\n'
There were 19 lines of code in "test.txt"
Function names:
count_loc -- 2 lines of code
Comme vous pouvez le voir, mon test d'impression pour la ligne montre un/t, mais l'instruction if dit explicitement (ce que je pensais) qu'il ne doit exécuter avec aucun caractère d'espace présent.
Voici mon fichier test complet que j'utilise:
def count_loc(infile):
""" Receives a file and then returns the amount
of actual lines of code by not counting commented
or blank lines """
loc = 0
for line in infile:
line = line.strip()
if len(line) > 0 \
and not line.startswith('//') \
and not line.startswith('/*'):
loc += 1
func_loc, func_name = checkForFunction(line);
elif line.startswith('/*'):
while True:
if line.endswith('*/'):
break
line = infile.readline().rstrip()
return loc
if __name__ == "__main__":
print ("Hi")
Function LOC = 15
File LOC = 19
Ne pas publier de doublons (http://stackoverflow.com/questions/929169/str-startswith-not-working-as-i-intended). –