【问题标题】:langdetect python - to write csv of filename, directory and languagelangdetect python - 编写文件名、目录和语言的 csv
【发布时间】:2017-03-27 19:57:30
【问题描述】:

如何创建一个循环 os.walk() 来查找所有“.txt”文件并创建一个包含三个字段的输出文件 .csv 目录、文件名、语言?

我可以使用 print 获取文件名和目录,但我不知道如何将它们放入 csv 中。 另外,我可以使用 langdetect (from langdetect import detect, detect("001.txt") 获取语言名称,但我被困在循环下面的问题中。

例子

Directory  Filename Language
/c/xx      001      en
/c/xx/y    001      fr

代码

import os
import glob

extension = '.txt'
os.chdir("/Desktop/Language_test")
result = [i for i in glob.glob('*.{}'.format(extension))]
print(result)

path=os.getcwd()
extension = '.txt'
for root, dirs_list, files_list in os.walk(path):
    for file_name in files_list:
        if os.path.splitext(file_name)[-1] == extension:
            file_name_path = os.path.join(root, file_name)
            print(file_name)
            print(file_name_path)   # This is the full path of 

过滤器文件

【问题讨论】:

  • ...您有问题吗?
  • [i for i in glob.glob('*.{}'.format(extension))] ??就做glob.glob('*.{}'.format(extension))

标签: python csv


【解决方案1】:

如果您需要检查子目录和当前目录中的文件,这样的方法将是一个不错的方法。

它使用os.walk 遍历目录结构并使用fnmatch.fnmatch 进行(简单)文件名匹配。

import csv
from fnmatch import fnmatch
try:
    from langdetect import detect
except ImportError:
    detect = lambda _: '<dunno>'
import os

rootdir = '.'  # current directory
extension = '.txt'
file_pattern = '*' + extension

with open('output.csv', 'w', newline='', encoding='utf-8') as outfile:
    csvwriter = csv.writer(outfile)

    for dirpath, subdirs, filenames in os.walk(os.path.abspath(rootdir)):
        for filename in filenames:
            if fnmatch(filename, file_pattern):
                lang = detect(os.path.join(dirpath, filename))
                csvwriter.writerow([dirpath, filename, lang])

【讨论】:

  • 这太棒了,唯一缺少的是这个 os.walk() 因为我也必须深入到目录中。我是否需要像这样为 os.walk(path) 中的 root、dirs_list、files_list 循环它:对于 files_list 中的文件名:使用 open('output.csv'、'w'、newline='') 作为输出文件:filedir = os.path.abspath('.') writer = csv.writer(outfile) for filename in glob.glob('./*' + extension): writer.writerow([filedir, os.path.basename(filename),检测(文件名)])
  • @user3788123:在 cmets 中很难阅读代码——所以我刚刚更新了我的答案,所以它使用 os.walk() 而不是 glob.glob()
  • @user3788123:很高兴听到,不客气。我更新的答案不再使用glob(),它在内部使用fnmatch。相反,它只是直接调用后一个函数。一样的区别。 ;-)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-05-17
  • 1970-01-01
  • 2019-02-23
  • 1970-01-01
相关资源
最近更新 更多