【问题标题】:Converting code to read files in windows to linux将windows中读取文件的代码转换为linux
【发布时间】:2018-09-10 22:23:06
【问题描述】:

我目前收到来自 cv2 resize 的错误,表明文件中没有任何内容。它在 Windows 上运行良好,但我正在努力弄清楚需要做什么(除了更改路径名)才能在 linux 上运行。

path1 ='C:/Users/L/Software/Data/channels/ch3'

listing = os.listdir(path1)

ch3_matrix = array([array(cv2.resize(cv2.imread(path1 + '\\' + im2,0),(55,55))).flatten()
            for im2 in listing])

【问题讨论】:

  • 在你的Linux机器上将path1变量的值改为ch3的路径怎么样?
  • 哎呀,对不起,我应该发布我已经更新了变量名。我的坏
  • 那么是什么让你觉得你需要改变什么?
  • 我相信你创建的最终路径不应该有一个反斜杠,而是一个普通的斜杠。我建议通常使用 pathlib 或 os.path.join,而不是使用字符串连接构建路径。
  • 宾果游戏,就是这样。谢谢!

标签: python linux windows io


【解决方案1】:

问题是您正在构建的最终路径:

path1 + '\\' + im2

其中path1 是您的基本目录,im2 是图像文件名。这样做(使用字符串连接)会很快导致问题,通常不鼓励。

我建议为此使用os.path.join 或更新的pathlib 模块,它们都独立于平台工作:

import os

BASE_PATH = 'C:/Users/L/Software/Data/channels/ch3'

images = os.listdir(BASE_PATH)
ch3_matrix = array([
    array(cv2.resize(cv2.imread(os.path.join(BASE_PATH, image), 0), (55, 55))).flatten()
    for image in images
])

import pathlib

BASE_PATH = pathlib.Path('C:/Users/L/Software/Data/channels/ch3')

images = os.listdir(BASE_PATH)
ch3_matrix = array([
    array(cv2.resize(cv2.imread(str(BASE_PATH / image), 0), (55, 55))).flatten()
    for image in images
])

要让您的代码在 Linux 上运行,您只需更改 BASE_PATH

【讨论】:

    猜你喜欢
    • 2013-04-20
    • 2012-04-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多