Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/316.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
仅在linux中没有此类文件或目录python(来自windows)_Python - Fatal编程技术网

仅在linux中没有此类文件或目录python(来自windows)

仅在linux中没有此类文件或目录python(来自windows),python,Python,在Windows和Linux(Debian)中,我在一个文件夹中有相同的精确目录结构,其中脚本位于static+dataoutput文件夹中 为什么下面的代码在Windows中运行良好,但在linux中没有出现这样的文件或目录路径错误 @app.route('/_getdataoutputfilelisting') def getdataoutputfilelisting(): listoffilesindataouput = getfiles('static/dataoutput')

在Windows和Linux(Debian)中,我在一个文件夹中有相同的精确目录结构,其中脚本位于static+dataoutput文件夹中

为什么下面的代码在Windows中运行良好,但在linux中没有出现这样的文件或目录路径错误

@app.route('/_getdataoutputfilelisting')
def getdataoutputfilelisting():
    listoffilesindataouput = getfiles('static/dataoutput')
    return jsonify(listoffiles = listoffilesindataouput) 

def getfiles(dirpath):
    a = [s for s in os.listdir(dirpath)
         if os.path.isfile(os.path.join(dirpath, s))]
    a.sort(key=lambda s: os.path.getmtime(os.path.join(dirpath, s)))
    a.reverse()
    return a
有没有一种方法可以使它具有通用性,从而在两种OSs中都能工作


谢谢

这可能与DOS和Unix对待换行符和返回的方式不同有关。尝试使用
dos2unix
工具转换文件

SYNOPSIS
           dos2unix [options] [FILE ...] [-n INFILE OUTFILE ...]
           unix2dos [options] [FILE ...] [-n INFILE OUTFILE ...]

我会尝试更改传递到getfiles的字符串

请尝试以下方法:

os.path.join(os.getcwd(),'static','dataoutput')

我无法验证它是否能在Windows下工作,但它能在Linux下工作;而
'static/dataoutput'
不会。

Windows和Linux有不同的路径分隔符。对于Windows,部分路径用反斜杠(\)分隔,而在Linux上是正斜杠(/)。您可以按照@mcneo的建议使用
os.path.join('static','dataoutput')
(即使没有
getcwd()
),或者使用
os.path.sep
自己创建路径

getfiles(os.path.join('static', 'dataoutput'))
# or...
getfiles('static' + os.path.sep + 'dataoutput')
从技术上讲,您也可以检查平台并输入正确的斜杠,但不建议这样做。我在这里添加它是为了更好地演示这个问题,但是您应该使用
os.path

if sys.platform == 'win32':
  getfiles('static\\dataoutput')
else:
  getfiles('static/dataoutput')

没有这样的文件或目录:“static/dataoutput”我曾经遇到过同样的问题,请尝试使用
/
而不是
/
。这是一个相对路径。进程的当前目录是什么?