我试图用文件名中的服务器跟踪文件,我可以用服务器**打印目录中的所有文件,但是当我尝试读取文件时,它会给出错误"话说:
Traceback (most recent call last):
File "view_log_packetloss.sh", line 27, in <module>
with open(filename,'rb') as files:
IOError: [Errno 2] No such file or directory: 'pcoip_server_2014_05_19_00000560.txt'
我看到类似的问题被问到但是我无法修复我的问题,使用chdir将当前目录更改为文件目录时修复了一些错误。任何帮助表示赞赏。谢谢
#!usr/bin/env/ python
import sys, re, os
#fucntion to find the packetloss data in pcoip server files
def function_pcoip_packetloss(filename):
lineContains = re.compile('.*Loss=.*') #look for "Loss=" in the file
for line in filename:
if lineContains.match(line): #check if line matches "Loss="
print 'The file has: ' #prints if "Loss=" is found
print line
return 0;
for root, dirs, files in os.walk("/users/home10/tshrestha/brb-view/logs/vdm-sdct-agent/pcoip-logs"):
lineContainsServerFile = re.compile('.*server.*')
for filename in files:
if lineContainsServerFile.match(filename):
with open(filename,'rb') as files:
print 'filename'
function_pcoip_packetloss(filename);
答案 0 :(得分:1)
文件是根目录中文件对象的名称。
dirpath是一个字符串,即目录的路径。 dirnames是dirpath中子目录的名称列表(不包括&#39;。&#39;和&#39; ..&#39;)。 filenames是dirpath中非目录文件的名称列表。请注意,列表中的名称不包含路径组件。要获取dirpath中文件或目录的完整路径(以top开头),请执行os.path.join(dirpath,name)。
试试这个
for root, dirs, files in os.walk("/users/home10/tshrestha/brb-view/logs/vdm-sdct-agent/pcoip-logs"):
lineContainsServerFile = re.compile('.*server.*')
for filename in files:
if lineContainsServerFile.match(filename):
filename = os.path.join(root, filename)
with open(filename,'rb') as files:
print 'filename:', filename
function_pcoip_packetloss(filename);
答案 1 :(得分:0)
os.walk()
函数是3元素元组的生成器。每个元组都包含一个目录作为其第一个元素。第二个元素是该目录中的子目录列表,第三个元素是文件列表。
要生成每个文件的完整路径,必须连接第一个条目(目录路径)和第三个条目(文件)中的文件名。最直接且与平台无关的方法是使用os.path.join()
。
另请注意,使用
会更有效率lineContainsServerFile = re.compile('server')
和lineContainsServerFile.search()
而不是尝试匹配通配符字符串。即使在第一种情况下,尾随".*
也是多余的,因为"server"
字符串后面的内容是无关紧要的。