如何获取目录的输入

2024-09-30 07:29:23 发布

您现在位置:Python中文网/ 问答频道 /正文

我要做的是遍历一个日志文件的目录,它以“filename001.log”开头,一个目录中可以有100个文件

我要对每个文件运行的代码是检查以确保日志的第8个位置始终包含一个数字。我怀疑是一个非数字正在抛出我们的解析器。下面是一些简单的代码,我想检查一下:

# import re
from urlparse import urlparse

a = '/folderA/filename*.log' #<< currently this only does 1 file
b = '/folderB/' #<< I'd like it to write the same file name as it read
with open(b, 'w') as newfile, open(a, 'r') as oldfile:
    data = oldfile.readlines()
    for line in data:
        parts = line.split()
        status = parts[8]  # value of 8th position in the log file
        isDigit = status.isdigit()

        if isDigit = False:
                print " Not A Number :",status
                newfile.write(status)

我的问题是:

  1. 如何告诉它读取目录中的所有文件?(以上内容每次只适用于1个文件)
  2. 如果我发现某个不是数字,我想把这个字符写到另一个文件夹中,但与日志文件同名。例如,我发现filename002.log在一个日志行中有一个“*”。我希望folderB/filename002.log被创建,而非数字字符被写入。在

听起来很简单,我只是不太擅长编码。在


Tags: 文件the代码import目录logasstatus
2条回答

要读取与给定模式匹配的一个目录中的文件并写入另一个目录,请使用^{} moduleos.path函数构造输出文件:

srcpat = '/folderA/filename*.log'
dstdir = '/folderB'
for srcfile in glob.iglob(srcpat):
   if not os.path.isfile(srcfile): continue

   dstfile = os.path.join(dstdir, os.path.basename(srcfile))
   with open(srcfile) as src, open(dstfile, 'w') as dst:
       for line in src:
           parts = line.split()
           status = parts[8]  # value of 8th position in the log file
           if not status.isdigit():
               print " Not A Number :", status
               dst.write(status)  # Or print >>dst, status if you want newline

这将创建空文件,即使没有找到错误的条目。您可以等到文件处理完毕(并且关闭with块),然后检查输出的文件大小,如果为空,则将其删除;或者,您可以采用一种惰性方法,在无条件开始迭代之前删除输出文件,但不要打开它;只有当你得到一个错误的值时,你才会打开这个文件(用append代替write来防止前面循环的输出被丢弃),写进去,允许它关闭。在

  1. 导入操作系统并使用:for filenames in os.listdir('path'):。这将列出目录中的所有文件,包括子目录。

  2. 只需打开具有正确路径的第二个文件。由于已经通过上述方法迭代得到了filename,因此只需替换目录。您可以使用os.path.join来实现这一点。

相关问题 更多 >

    热门问题