在python中查找多个文件和文件夹中的作者姓名

时间:2014-11-08 15:08:01

标签: python

import os

folderpath = 'D:/Workspace'
typeOfFile = [".c", ".C", ".cpp", ".CPP"]

for dirname, dirnames, filenames in os.walk(folderpath):
        for filename in filenames:
            if filename.endswith(tuple(typeOfFile)):
                for line in open(os.path.join(dirname, filename), "r").readlines():
                    left,author,right = line.partition('author')
                    if author:
                        name =(right[:100])
                        combine = name.replace(" ", "")
                        remove = combine.strip(':')
                        print remove

帮助我如何使用此功能。因为当我想使用它时,这个函数保持循环打印未知。

                else: 
                    print 'unknown'

因为文件中没有字符串作者。它将跳过该文件并找到另一位作者。对不起,我的英语不好。感谢

1 个答案:

答案 0 :(得分:0)

我们可以使用regular expression通过构建模式来提取名称:

通常,我们在作者关键字后面找到一个作者姓名作为评论。有些人更愿意使用__author__并在:::===之后写下姓名。这取决于你经常观察到的东西。我们鼓励人们在github上查看人们如何在评论中使用作者。

作者姓名通常在此之后出现,有些人使用昵称,因此它并不是一直都是alphabitic。

pattern= r'.*author*.[^:=]*[:=]*(.[^\n]+)'

在正则表达式中。表示任何字符,而+表示一个或多个字符,^表示除了字符之外的字符。你想在文本中“匹配”一个或多个字符,除了新行(有些人可能会在写第一个/最后一个名字时使用空格)。括号意味着捕获一个单词中的内容,这个单词应该在之前接受任何charchter的特定文本“作者”之后找到,除了'= /:'之外的任何章程,':/ ='用于稍后识别另一部分。

除了打开文件的操作外,还要验证格式。让我们考虑这个简单的例子来说明如何使用正则表达式来提取作者姓名的想法。

#simple case
data1= """
author='helloWorld' 

def hello()
    print "hello world" 
    """
# case with two ::
data2= """
__author__::'someone'

def hello()
    print "hello world" 
    """
#case where we have numerical/alphabetic
data3= """
__author__='someone201119'

def hello()
    print "hello world" 
    """
#Case where no author in code
data4= """
def hello()
    print "hello world" 
    """


for data in [data1,data2,data3,data4]:
    m= re.match(r'.*author*.[^:=]*[:=]*(.[^\n]+)',data,re.DOTALL)
    if m: 
        author= m.group(1)
    else:
        author='unkown'
    print "author is this case is:", author

输出:

author is this case is: 'helloWorld'
author is this case is: 'someone'
author is this case is: 'someone201119'
author is this case is: unkown

<强>更新

您的全部代码如下所示:

import os
import re

folderpath = 'D:/Workspace'
typeOfFile = [".c", ".C", ".cpp", ".CPP"]

for dirname, dirnames, filenames in os.walk(folderpath):
        for filename in filenames:
            if filename.endswith(tuple(typeOfFile)):
                data= open(os.path.join(dirname, filename), "r").readlines():
                m= re.match(r'.*author*.[^:=]*[:=]*(.[^\n]+)',data,re.DOTALL)
                if m: 
                    author= m.group(1)
                else:
                    author='unkown'
                print "author is this case is:", author, "in file", filename