2014-09-03 69 views
0

我想为我自己的目的使用Python脚本here。我不是Python家伙,所以希望有人能看到我的错误。使用正则表达式将文件夹内容写入CSV

下面的脚本不会出错。我的CSV创建时没有值。我有没有加入问题?我期待将数据写入CSV。

# import the standard libraries you'll need 
import os # https://docs.python.org/2/library/os.html 
import re # https://docs.python.org/2/library/re.html 

# this function will walk your directories and output a list of file paths 
def getFilePaths(directory): 
    file_paths = [] 
    for root, directories, files in os.walk(directory): 
     for filename in files: 
      filepath = os.path.join(root, filename) 
      file_paths.append(filepath) 
    return file_paths 

audio_file_paths = getFilePaths("Z:\Dropbox\Apps\DirScan\files") 
output_to_csv = []; 

for audio_file in audio_file_paths: 
    base_path, fname = os.path.split(audio_file) 

    reg_ex = re.compile("^(.*) - (.*) - (.*).mp3$"); 

    # now apply the compiled regex to each path 
    name_components = reg_ex.match(fname); 

    output_to_csv.append("{0},{1}".format(",".join(name_components), base_path)); 

#create the file, making sure the location is writeable 
csv_doc = open("database.csv", "w"); 

# now join all the rows with line breaks and write the compiled text to the file 
csv_doc.write('\n'.join(output_to_csv)); 


#close your new database 
csv_doc.close() 
+1

你想找到歌曲的名字? – Kasramvd 2014-09-03 23:09:22

+0

是的。理想的情况是eyeD3这样的MP3标签可以工作。但文件名遵循严格的格式,因此可以从中提取此表/ CSV。 – 2014-09-03 23:16:18

回答

1

当我运行代码,我得到这个错误:

Traceback (most recent call last): 
    File "x.py", line 29, in <module> 
    output_to_csv.append("{0},{1}".format(",".join(name_components), base_path)); 
TypeError 

因为name_components是一个正则表达式Match对象,不作为参数传递给join工作。您需要替换:

",".join(name_components) 

有了:

",".join(name_components.groups()) 

做出这样的转变后,我可以看到CSV文件被正确写入。

另一个小问题:你不需要在python的一行末尾使用分号。

+0

谢谢,谢谢!仅供参考,我不得不在文件路径中将反斜杠更改为正斜杠。 – 2014-09-04 00:49:18