0

我正在尝试在我的 Visual Studio 终端中打开 CSV 文件中的数据并接收:

''''

Traceback (most recent call last):
  File "/home/jubal/ CrashCourse Python Notes/Chapter 16 CC/Downloading Date/csv 
format/highs_lows.py", line 7, in <module>
    with open(filename) as f:
FileNotFoundError: [Errno 2] No such file or directory: 'sitka_weather_2018_full.csv'

''''

这是程序highs_lows.py,它与sitka_weather_2018_full.csv保存在同一文件夹中

''''

    import csv

filename = 'sitka_weather_2018_full.csv'
with open(filename) as f:
    reader = csv.reader(f)
    header_row = next(reader)

    highs = []
    for row in reader:
        highs.append(row[8])

print(highs)

''''

我的 latop 运行 linux mint 19.2 cinnamon,我也可以使用 jupyter notebook 运行这个程序,但是当我尝试转换为 python 程序并在 VS 代码终端中运行它时,就会出现这个问题。编程新手,所以任何帮助都会很棒。谢谢你的时间!

4

2 回答 2

0

我猜您正在一个终端中运行脚本,该终端与脚本和 csv 不在同一个子文件夹中。

要验证这一点,您只需 cd 进入子目录并在那里运行脚本。

为了能够从任何目录调用脚本,您可以提供绝对路径而不是程序中的相对路径。

你可以得到这样的绝对路径:

import os
CURRENT_DIR = os.path.dirname(__file__)
file_path = os.path.join(CURRENT_DIR, 'sitka_weather_2018_full.csv')

with open(file_path) as f:
   reader = csv.reader(f)
   ...

编辑__file__说明:

__file__是一个特殊的 Python 变量,由两边的双下划线标记,也称为“dunder”变量。该__file__变量由 Python 为其导入或执行的每个模块定义,并包含指向当前模块的路径。

因此,如果您使用 执行脚本python highs_lows.py,则变量设置为

"/home/jubal/ CrashCourse Python Notes/Chapter 16 CC/Downloading Date/csv 
format/highs_lows.py"

因为,在这种情况下,您想知道 csv 文件在同一目录中的路径,我们剪切了路径,以排除脚本的名称并仅保留目录的路径:

CURRENT_DIR = os.path.dirname(__file__)

在最后一步中,我们需要将目录的路径与 csv 文件的路径连接起来以获取绝对路径,例如:

"/home/jubal/ CrashCourse Python Notes/Chapter 16 CC/Downloading Date/csv 
    format/sitka_weather_2018_full.csv"

而不是第一个示例中的相对路径"./sitka_weather_2018_full.csv"

是另一篇更深入地讨论这个概念的帖子:

于 2020-05-03T13:52:07.527 回答
0

这就是我如何解释以前帖子中的答案。

import os
import csv


CURRENT_DIR = os.path.dirname(__file__)
file_path = os.path.join(CURRENT_DIR, 'sitka_weather_2018_full.csv')

with open(file_path) as f:
    reader = csv.reader(f)
    header_row = next(reader)

    highs = []
    for row in reader:
        highs.append(row[8])


    print(highs)

一切正常!

于 2020-05-03T15:43:48.143 回答