【问题标题】:FileNotFoundError in python using jupyter notebook使用 jupyter notebook 在 python 中的 FileNotFoundError
【发布时间】:2019-01-08 17:09:26
【问题描述】:

这只是我面临的一个简单问题。我正在尝试在 jupyter 笔记本中读取我的 csv 文件。它向我显示了一个错误,说 FileNotFoundError 。我在任何地方都找不到合适的解决方案。请帮助我摆脱这个错误并阅读 csv 文件。提前致谢

错误是

 FileNotFoundError
 Traceback (most recent call last)
  <ipython-input-16-3b1f95fc5c0b> in <module>()
  ----> 1 dataset = pd.read_csv('D:\seminar\totaldata.csv')
  2 dataset.head()

      ~\Anaconda3\lib\site-packages\pandas\io\parsers.py in 
      parser_f(filepath_or_buffer, sep, delimiter, header, names, 
    index_col, usecols, squeeze, prefix, mangle_dupe_cols, dtype, engine, 
    converters, true_values, false_values, skipinitialspace, skiprows, 
    nrows, na_values, keep_default_na, na_filter, verbose, 
        skip_blank_lines, parse_dates, infer_datetime_format, 
     keep_date_col, date_parser, dayfirst, iterator, chunksize, 
    compression, thousands, decimal, lineterminator, quotechar, quoting, 
    escapechar, comment, encoding, dialect, tupleize_cols, 
  error_bad_lines, warn_bad_lines, skipfooter, doublequote, 
     delim_whitespace, low_memory, memory_map, float_precision)
    676                     skip_blank_lines=skip_blank_lines)
         677 
      --> 678         return _read(filepath_or_buffer, kwds)
       679 
        680     parser_f.__name__ = name

     ~\Anaconda3\lib\site-packages\pandas\io\parsers.py in 
      _read(filepath_or_buffer, kwds)
      438 
          439     # Create the parser.
      --> 440     parser = TextFileReader(filepath_or_buffer, **kwds)
   441 
    442     if chunksize or iterator:

  ~\Anaconda3\lib\site-packages\pandas\io\parsers.py in __init__(self, f, 
   engine, **kwds)
          785             self.options['has_index_names'] = 
   kwds['has_index_names']
       786 
      --> 787         self._make_engine(self.engine)
         788 
       789     def close(self):

        ~\Anaconda3\lib\site-packages\pandas\io\parsers.py in 
    _make_engine(self, engine)
      1012     def _make_engine(self, engine='c'):
        1013         if engine == 'c':
 -> 1014             self._engine = CParserWrapper(self.f, 
 **self.options)
      1015         else:
   1016             if engine == 'python':

   ~\Anaconda3\lib\site-packages\pandas\io\parsers.py in __init__(self, 
      src, **kwds)
       1706         kwds['usecols'] = self.usecols
       1707 
   -> 1708         self._reader = parsers.TextReader(src, **kwds)
      1709 
     1710         passed_names = self.names is None

 pandas\_libs\parsers.pyx in pandas._libs.parsers.TextReader.__cinit__()

      pandas\_libs\parsers.pyx in 
 pandas._libs.parsers.TextReader._setup_parser_source()

FileNotFoundError: 文件 b'D:\seminar\totaldata.csv' 不存在

    dataset = pd.read_csv('D:\seminar\totaldata.csv')  
    dataset.head()

【问题讨论】:

  • 请展示D:\seminar\的内容,最好通过os.listdir('D:\seminar\')
  • @Slam 你不需要一个原始字符串来让反斜杠按预期工作吗?
  • 这可能是反斜杠问题。尝试使用pd.read_csv(r'D:\seminar\totaldata.csv') 来代替使用原始字符串文字。
  • @LukeDeLuccia 或者使用正确类型的目录分隔符 (/) 并让 Python 在后台将它们转换为 Bad 字符???
  • @anky:它不起作用。试过

标签: python python-3.x pandas jupyter-notebook


【解决方案1】:

从我在 cmets 中收集的信息来看,似乎是编码问题。

您可以通过先安装chardet 后跟以下代码来找到编码:

import chardet    
rawdata = open('D:\\seminar\\totaldata.csv', 'rb').read()
result = chardet.detect(rawdata)
charenc = result['encoding']
print(charenc)

这将为您提供文件的编码。

一旦你有了编码,你就可以读成:

pd.read_csv('D:\\seminar\\totaldata.csv',encoding = 'encoding you found')

pd.read_csv(r'D:\seminar\totaldata.csv',encoding = 'encoding you found')

你会得到所有编码here的列表

【讨论】:

    【解决方案2】:

    如果您尝试使用 Jupyter Notebook 读取位于本地计算机上的 csv 文件,并且如果您尝试使用 csv 文件的相对路径读取它,您可能会发现使用完整文件路径csv 文件将修复错误并允许 pandas 读取文件。我有一个类似的问题,这对我有用。

    【讨论】:

      【解决方案3】:

      派对迟到了。

      如果您尝试使用 Jupyter Notebook 读取位于本地计算机上的 csv 文件,并且如果您尝试使用 csv 文件的相对路径读取它,那么它将更改当前工作的相对路径目录 + 你的文件参数[文件名]

      因为如果你不使用完整路径 [绝对路径] 之类的,Jupyter Notebook 会自动附加默认路径

      (注:假设 Jupyter 默认路径为

      'C:\Users\ersar\Desktop' # 获取当前工作目录首先检查使用

      import os
      os.getcwd()
      

      现在假设你提供

      companies = pd.read_csv("companies.txt", sep="\t", encoding = "ISO-8859-1")
      

      但您的文件位于 'C:\Users\ersar\Desktop\Project\Company'

      然后它将在您的当前工​​作目录(cwd='C:\Users\ersar\Desktop')中搜索文件,该文件找不到,因此会出错。

      所以总是给出完整路径而不是相对路径

      喜欢

      companies = pd.read_csv("C:\\Users\\ersar\\Desktop\\Project\\Company\\companies.txt", sep="\t", encoding = "ISO-8859-1")
      

      根据熊猫文档: filepath_or_bufferstr,路径对象或类文件对象 任何有效的字符串路径都是可接受的。该字符串可以是一个 URL。有效的 URL 方案包括 http、ftp、s3、gs 和文件。对于文件 URL,需要一个主机。本地文件可以是:file://localhost/path/to/table.csv。 如果你想传入一个路径对象,pandas 接受任何 os.PathLike。 通过类文件对象,我们指的是具有 read() 方法的对象,例如文件处理程序(例如通过内置的 open 函数)或 StringIO。

      【讨论】:

        【解决方案4】:

        从文件夹顶部复制完整路径位置并将其粘贴到 pd.read_csv(.....)
        这对我有用。

        【讨论】:

        • 您好 Faiz,这个问题已经有了答案(绿色标记)。您必须了解手头的问题和。在这种情况下,您假设操作未能复制路径,但问题源于字符“\”被用作转义字符(“\n”、“\t”分别用于下一行和制表)。另外,最好在回答之前先询问一下(下面的问题)。
        【解决方案5】:
        dataset = pd.read_csv('D:\seminar\\totaldata.csv')  
        dataset.head()
        

        使用反斜杠转义字符串中的特殊字符(这里 \t 是制表符的特殊字符)可能会有所帮助。

        您可以使用原始字符串代替,它会自动将反斜杠视为文字字符,而不是将其视为转义字符。

        dataset = pd.read_csv(r'D:\seminar\totaldata.csv')  
        dataset.head()
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2021-03-25
          • 2017-08-11
          • 1970-01-01
          • 1970-01-01
          • 2019-09-15
          • 2020-02-13
          • 2021-07-25
          相关资源
          最近更新 更多