这是代码:
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文件的名称时,代码可以正常工作。
谢谢你们!
答案 0 :(得分: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'
答案 1 :(得分:0)
我只是在这里添加kwatford的评论作为答案。你需要改变的是
filename = os.path.join(getMediaPath(),aFile)
newfile = os.path.join(getMediaPath() , 'happyEdited.txt')
答案 2 :(得分: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
块相同,但只是简单的一行。它还会为您打开和关闭文件流。