我根本不懂Python,但我必须尽快运行这个脚本。我在网上搜索过类似的问题,但我找不到确切的情况。
我运行了一个脚本nameTime.py,该脚本应该将access_log中的用户名和日期输出到一个列表中,该列表包含日志中每天的每个用户的数量和名称。脚本没有完成并输出以下错误。
Traceback (most recent call last):
File "./nameTime.py", line 19, in <module>
f=open(file,'r')
IOError: [Errno 2] No such file or directory: 'access_log-20150215'
我将它从/ etc / httpd / logs复制到/ opt / logs中,它是该目录中唯一的access_log。顺便说一下,修改后的os.chdir(...)以及if.startswith(...)命令的完全相同的脚本在子目录/ opt / logs / ion中工作(但其中也没有不存在的文件)
第一行脚本:
import os
import re
os.chdir("opt/logs")
user = []
dates = []
userlist = set()
userPerDay = []
name = re.compile(r'\s[A-Z][A-Z\s*]+\.[A-Z]+[A-Z\s*]*\.[A-Z]+[A-Z\s*]*(?=\.[0-9]+)')
longname = re.compile(r'\s[A-Z][A-Z\s*]+\.[A-Z]+[A-Z\s*]*\.[A-Z]+[A-Z\s*]*\.[A-Z]+[A-Z\s*](?=\.[0-9]+)')
date = re.compile('[0-3][0-9]\/[A-Za-z]+\/[0-9]+(?=:)')
for root, dirs, files in os.walk("./"):
for file in files:
if file.startswith("access_"):
f=open(file,'r')
似乎名称“file”仍然包含旧文件名的值。我在脚本中根本没有看到任何名称“file”为其分配了该值。因为我只希望这个脚本处理/ opt / logs,access_log中唯一的访问日志,显然我必须清除那个旧值(或者它已经完成);我该怎么做?
答案 0 :(得分:0)
无法保证您要查找的文件位于当前目录中。
打开文件时需要加入文件路径根目录:
import os.path
../..
f = open(os.path.join(root,file),'r')
../..
os.chdir('opt/logs')
也可能是错误的(它假定脚本是从特定目录运行的) - 最好使用绝对路径(例如/opt/logs
或任何适合您的情况)。
答案 1 :(得分:0)
检查root
变量。您可能正在./access_log-20150215
查找实际位于./subdir/access_log-20150215
等子目录中的文件。
如果要浏览所有子目录,请使用
f=open(os.path.join(root,file),'r')
但如果你只想要顶级目录,你可以使用
os.listdir('.')
答案 2 :(得分:0)
好的,所以从@James和@isedev的建议的顶部开始,我首先尝试了os.listdir('。')并且...它有效。我在/ opt / logs文件夹中将nameTime.py运行到仅进程access_log(不查找access_log-20150215或其他任何内容)并获取我的输出文件dateAccess。 txt,就像我需要的那样。谢谢你的其他建议;我确定我必须在某个时候调整这个文件才能在我们的其他系统上运行以提供更多的统计信息,所以我列表中的下一步就是研究Python,这样你的其他建议对我来说才有意义。非常感谢!