selfteaching / selfteaching-python-camp

147 stars 881 forks source link

Day09 with open命令疑问 #3094

Open luckydxx opened 5 years ago

luckydxx commented 5 years ago

我看了很多同学的作业,同样都导入了json。但是在我使用open 命令的时候,必须要输入完整的路径如:with open('I:/Github/selfteaching-python-camp/exercises/1901050045/d09/mymodule/tang300.json',encoding='UTF-8') as f:

而我看其他同学的作业都是with open('tang300.json','r',encoding='UTF-8').我尝试用他们的方法,打不开。提示是:FilenotfoundError:[Errno 2] No such file or directory:'tang300.json'

请问这是因为什么原因

srvz commented 5 years ago

可以参考下面的打开文件的方式,注意看注释

from os import path
import json

def load_file():
    '''
    1.
    下面是常用的获取文件路径的方式,要确保 tang300.json 跟当前文件在同一文件夹下,这两种方式等价
    file_path = path.join(path.dirname(path.abspath(__file__)), './tang300.json')
    '''
    file_path = path.join(path.dirname(path.abspath(__file__)), 'tang300.json')
    print('当前文件路径:', __file__, '\n读取文件路径:', file_path)

    '''
    2.
    这种方式表示 tang300.json 在当前文件的上一级目录
    file_path = path.join(path.dirname(path.abspath(__file__)), '../tang300.json')
    print(__file__, file_path)

    3.
    这种方式表示 tang300.json 在当前文件的上一级目录的 data 文件夹下
    file_path = path.join(path.dirname(path.abspath(__file__)), '../data/tang300.json')
    print(__file__, file_path)

    '''

    '''
    读取文件时如果抛出 decode error 之类的错误可以用下面的两种方式替换
    1. with open(file_path, 'rb') as f:
    2. with open(file_path, 'r', encoding='utf-8') as f:
    '''
    with open(file_path, 'r', encoding='utf-8') as f:
        return json.load(f)
EthanYan6 commented 5 years ago

建议了解一下相对路径以及绝对路径的区别,你会发现新大陆的。