我正在使用Python 3.4
这是我的代码:
fileObject = open("names.txt", "r")
counter = 0
for line in fileObject:
fileObject.readline()
counter = counter + 1
print("The number of lines is: ", counter)
当我运行它时,无论我放置文件的位置,我都会重复收到以下Traceback错误:
FileNotFoundError: [Errno 2] No such file or directory: 'names.txt'
我在本书中找到的唯一可能相关信息(我目前正在参加Python课程)如下:
如果open函数收到不包含路径的文件名,则假定该文件与程序位于同一目录中。
但是我把文件放在哪里并不重要,这不会起作用。虽然,当我使用字母r"作为路径文字的前缀时,如下所示:
fileObject = open(r"C:\Python34\names.txt", "r")
counter = 0
for line in fileObject:
fileObject.readline()
counter = counter + 1
print("The number of lines is: ", counter)
然后,它会起作用,但不会显示包含数字的行。(如何使其包含这些?) 最后,我还必须更改我的代码以允许用户输入他们想要读取的文件,但只读取文件的前5行,如果小于将显示所有行。它遵循(这与我不能简单地键入名称(" names.txt")来搜索文件):
fileName = input("Enter the location of the file: ")
fileObject = open("r" + "\"" + fileName + "\"", "r")
for counter in range(5):
while fileObject != "":
file = fileObject.readline()
print(file)
fileObject.close()
它给出了以下Traceback错误:
OSError: [Errno 22] Invalid argument: 'r"C:\\Python34\\names.txt"'
我为什么收到这个? (我还注意到它增加了额外的" \"在每个已经存在的旁边 - 错误消息包含4" \"而我只输入2。)
总结:
(1.)"FileNotFoundError" for "names.txt".
(2.)如何使"readline()"
方法识别数字(int' s / float' s)。
(3.)"Invalid Argument"
用户输入要搜索的文件时的回溯。
(4.)为什么最后一个问题[错误消息]显示的"\\"
字符加倍,而不是实际输入的字符。
答案 0 :(得分:1)
使用open
时,提供了相对路径(如"cat.txt"
),Python从当前工作目录中读取,这是您在终端中启动解释器的位置。确保你的路径正确。
要将字符串解析为数字,请使用int()
或float()
,float()
它会更安全,因为int("1.1")
会抛出错误
r前缀仅在您提供字符串文字时有效,例如r"123"
将起作用。执行"r" + string
只会将字符r添加到字符串的开头。更多关于为什么r
稍后打开文件的原因。您不需要在字符串周围添加引号,因为这会使路径无效。你只看到终端中字符串的引号,因为Python想要告诉你字符串是一个字符串。
\\
而不是\
,因为\
是用于转义序列的特殊控制字符,例如\n
和{{1} },仅使用反斜杠字符\t
。这也是当您使用\\
标志时打开文件的原因,该标志将字符串视为