我有一个python脚本的新问题。当我尝试运行它将路径作为参数传递给程序时,它返回错误消息:“No such file or directory
”。该程序应该遍历路径名指定的目录,以查找文本文件并打印出前两行。
确实,这是作业,但我看了很多关于os和sys的内容,但仍然没有得到它。你们有些退伍军人能帮助新手吗?感谢
#!/usr/bin/python2.7
#print2lines.py
"""
program to find txt-files in directory and
print out the first two lines
"""
import sys, os
if (len(sys.argv)>1):
path = sys.argv[0]
if os.path.exist(path):
abspath = os.path.abspath(path):
dirlist = os.listdir(abspath)
for filename in dirlist:
if (filename.endswith(".txt")):
textfile = open(filename, 'r')
print filename + ": \n"
print textfile.readline(), "\n"
print textfile.readline() + "\n"
else:
print "passed argument is not valid pathname"
else:
print "You must pass path to directory as argument"
答案 0 :(得分:5)
与您的路径相关的问题是:
path = sys.argv[0]
argv[0]
指的是命令运行(通常是Python脚本的名称)..如果你想要第一个命令行参数,请使用索引 1 ,而不是 0 < / strong>即可。即,
path = sys.argv[1]
示例脚本tmp.py
:
import sys, os
print sys.argv[0]
print sys.argv[1]
和:python tmp.py d:\users
给出:
tmp.py
d:\users
还有两个语法错误:
if os.path.exist(path): # the function is exists() -- note the s at the end
abspath = os.path.abspath(path): # there should be no : here
答案 1 :(得分:1)
os.listdir
返回目录中文件名的列表,但不返回其路径。例如。你有一个目录'test',并在其中记录a,b和c:
os.listdir("test") #-> returns ["a", "b", "c"]
如果要打开文件,则需要使用完整路径:
from os import path, listdir
def getpaths(dirname):
return [path.join(dirname, fname) for fname in listdir(dirname)]
getpaths("test") #-> returns ["test/a", "test/b", "test/c"]
以五行完整解决您的问题:
import sys, os
dir = sys.argv[1]
files = [open(os.path.join(dir, f)) for f in os.listdir(dir)]
first2lines = ['\n'.join(f.read().split("\n")[:2]) for f in files]
print '\n'.join(first2lines)