0

这是代码:

def edit(aFile):
   s = ''
   filename = getMediaPath() + aFile
   inputfile = open(filename, 'r')
   read = inputfile.readlines()
   inputfile.close()
   for lines in read:
     lines = lines.lower()
     lines = lines.replace("it's", "this is")
     lines = lines.capitalize()
     s = s + str(lines)
   newfile = getMediaPath() + 'happyEdited.txt'
   x = open(newfile, 'w')
   x.write(s)
   x.close()

我得到的错误是在“inputfile =”行。它说: “I/O 操作失败。 我试图读取一个文件,但不能。您确定该文件存在吗?如果它存在,您是否指定了正确的目录/文件夹?”**

我尝试将aFile作为带有媒体路径的字符串输入。我尝试将aFile设置为等于它的媒体路径,但没有任何效果。当我取出参数并将代码中的aFile替换为 .txt 文件的名称时,代码有效。

谢谢大家!

4

3 回答 3

1

几点建议:

您可以包含一个用于调试的检查例程,例如,

import os
print os.path.exists(filename) 
print os.path.isfile(filename)

而且,我建议使用

with open(filename,'r') as inputfile:
    # do your stuff

代替

inputfile = open(filename, 'r')
# do your stuff
inputfile.close()

因为with确保文件流在出现问题时肯定会关闭# do your stuff section,否则你必须使用excepts它来确保它,这只是多一点努力。with只是一种更方便的方式。

我认为你需要做的事情可能是:

newfile = getMediaPath() + '/happyEdited.txt'
于 2013-07-26T15:35:02.273 回答
0

我只是在这里添加 kwatford 的评论作为答案。你需要改变的是

filename = os.path.join(getMediaPath(),aFile)

newfile = os.path.join(getMediaPath() , 'happyEdited.txt')
于 2013-07-26T15:31:31.707 回答
0

这里的主要问题可能是您使用的是表示相对文件路径的简单字符串。如果您要提供完整的追溯,那么我可以给您一个更好的答案。

现在,这会给您带来很多问题,因此最好始终使用绝对路径。

现在,你说什么是绝对路径?好吧,它是从您的驱动器一直到您的实际文件目的地的路径。例如:C:/Foo/Bar/Cheese/happy.py。相对文件路径是相对于当前目录的路径。例如,您在命令行中并且您是 @ C:/Foo/Bar/Cheese/happy.py,如果同一目录中有另一个文件,例如more.py,那么您可以将其引用为./more.py,但这可能会导致您现在面临的几个问题。

那么,解决方案是什么?就像我说的,使用绝对路径,现在你怎么做?好吧,您使用了一个名为os.

所以,像这样:

import os

file_path = os.path.abspath(os.path.join(os.path.dirname(__file__), "name_of_file_in_current_dir")).replace(os.pardir, "/")

现在让我告诉你这意味着什么,os.path.abspath给你一个绝对路径。os.path.join允许您以灵活的方式加入路径,您可以加入文件夹。os.path.dirname为您提供指定文件的绝对路径,在本例中为__file__. __file__是一个特殊的变量。最后,操作系统内部可以使用不同的方式来分隔目录,一些使用//,一些使用\,一些使用\\。现在,这是最有效的方法/,因为它适用于所有系统。我们使用os.pardir它是因为它适用于所有系统,Windows、Linux 和 Unix,这使您的代码可移植!:D

此外,一个好的建议是使用该with语句。像这样:

with open(file_path) as file:

这与在其周围放置一个块相同try/catch,但在一次简单的行中。它还为您打开和关闭文件流。

于 2013-07-26T15:35:24.753 回答