从上述目录读取文件时出错(Python3.2)

2024-10-04 11:32:54 发布

您现在位置:Python中文网/ 问答频道 /正文

下面的代码

我在C:\TempFiles文件夹中保存了一个名为nd1.txt的记事本文档

import os,file,storage
database = file.dictionary()
tools = storage.misc()
lui = -1

def sendWord(wrd, findex):
    global lui
    if findex!=lui:
        tools.refreshRecentList()
        lui = findex
    if tools.mustIgnore(wrd)==0 and tools.toRecentList(wrd)==1:
        database.addWord(wrd,findex)        
def showPostingsList():
    database.display()

def parseFile(nfile, findex):
    for line in nfile:
        pl = line.split()
        for word in pl:
            print(word)
            sendWord(word.lower(),findex)

def parseDirectory():
    files = [open(f) for f in os.listdir('C:\TempFiles')]
    findex = 0
    for nf in files:
        parseFile(nf,findex)
        findex+=1

def main():
    parseDirectory()
    showPostingsList()

main()

现在每当我执行代码时,我都会得到以下错误消息

Traceback (most recent call last):
  File "E:\Documents\Information Retrieval\postingsList.py", line 39, in <module>
main()
  File "E:\Documents\Information Retrieval\postingsList.py", line 36, in main
parseDirectory(dirname)
  File "E:\Documents\Information Retrieval\postingsList.py", line 28, in parseDirectory
files = [open(f) for f in os.listdir('C:\TempFiles')]
  File "E:\Documents\Information Retrieval\postingsList.py", line 28, in <listcomp>
files = [open(f) for f in os.listdir('C:\TempFiles')]
FileNotFoundError: [Errno 2] No such file or directory: 'nd1.txt'

即使文件在上面提到的文件夹中,加上每个函数都正常工作,我还是用虚拟数据进行了检查

谁能告诉我我的代码哪里出错了吗?你知道吗


Tags: inforosmaindeflinefilestools
3条回答

正如沃夫碱所提到的,os.listdir只给出names of files。你知道吗

您需要查看os.path.abspathmodule。你知道吗

此外,使用一些日志代码来解决问题是值得的-

import os,file,storage
import logging

logging.basicConfig(level=logging.DEBUG)
database = file.dictionary()
tools = storage.misc()
lui = -1

def sendWord(wrd, findex):
    global lui
    if findex!=lui:
        tools.refreshRecentList()
        lui = findex
    if tools.mustIgnore(wrd)==0 and tools.toRecentList(wrd)==1:
        database.addWord(wrd,findex)        
def showPostingsList():
    database.display()

def parseFile(nfile, findex):
    for line in nfile:
        pl = line.split()
        for word in pl:
            print(word)
            sendWord(word.lower(),findex)

def parseDirectory():
    files = [open(f) for f in os.listdir('C:\TempFiles')]
    findex = 0
    logging.debug(os.path.abspath(os.curdir))
    for nf in files:
        logging.debug(os.path.exists(nf))
        parseFile(nf,findex)
        findex+=1

def main():
    parseDirectory()
    showPostingsList()

main()

os.listdir提供文件名,而不是完整路径。您需要在调用open之前添加路径,最好使用os.path.join。你知道吗

因为os.listdir将返回文件名而不是文件路径。你最好在文件名前加上C:\TempFiles\

相关问题 更多 >