【问题标题】:zed shaw's exercise 15 open functionzed shaw的练习15开启功能
【发布时间】:2012-04-19 08:52:39
【问题描述】:

我对 zed shaw 的练习 15 有点卡住。 其实我对原来的程序没有问题, 但问题是当我尝试额外的信用时 他要求我们使用原始输入而不是 argv。

所以,这是我使用的代码

filename=raw_input("enter filename :")
print "here's your file %r" % filename
txt=open(filename)
print txt.read()

当它询问文件名时,我给出路径 e:\python\ex15_sample.txt 我收到以下错误 这一行 --> txt = open(filename) 它进一步说 没有这样的文件或目录

那么,我该怎么办?

【问题讨论】:

  • 如果你在命令行输入dir e:\python\ex15_sample.txt,文件是否可见?
  • 在输入文件名时可以尝试使用`\\`而不是`\`吗?
  • 发布错误的堆栈跟踪。还有你的源代码。
  • 当我在命令行中输入它时,它显示了一种表格结构,其中给出了模式、最后写入时间和长度名称。所以,我认为它会读取文件,但我实际上使用以下命令运行 python 程序 python e:\python\ex15.py
  • @user1297440:没关系。我只是想确保输入的文件与真实文件完全匹配。

标签: python


【解决方案1】:

您的代码很好。输入文件名时出错。检查文件是否真的存在。

>>> filename=raw_input('enter filename :')
enter filename :c:\Users\All Users\Autodesk\Revit\Addins\2012\RevitLookup.addin
>>> txt = open(filename)
>>> print txt.read()
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<RevitAddIns>
  <AddIn Type="Application">
    <Assembly>C:\Program Files (x86)\Revit 2012 SDK\RevitLookup\CS\bin\Debug\RevitLookup.dll</Assembly>
    <ClientId>356CDA5A-E6C5-4c2f-A9EF-B3222116B8C8</ClientId>
    <FullClassName>RevitLookup.App</FullClassName>
    <Name>Revit Lookup</Name>
    <VendorId>ADSK</VendorId>
    <VendorDescription>Autodesk, www.autodesk.com</VendorDescription>
  </AddIn>
</RevitAddIns>

(呃,那只是我电脑上碰巧放着的一些文件……)

确保在输入文件时不要使用引号 - 或在之后去掉它们!为argv 执行此操作可能有效,但绝对不适用于raw_input

编辑:我认为这是问题所在:您正在输入带引号的文件名(例如当您在资源管理器中右键单击“复制为路径”时得到的)。对于sys.argv,这些被(Python?OS?我认为是Python...)删除,但不是raw_input

【讨论】:

  • 文件确实存在,当我使用 argv 而不是 raw_input 时程序可以工作
  • @MarceloCantos,对,我自己验证过,得出了同样的结论。请注意,我已更新我的答案以反映这一点。
  • 我不明白你的意思它不包括换行符
  • @user1297440:我认为您在从raw_input 读取的输入中可能仍有尾随 CRLF,但我错了。您的程序运行良好。我也将它作为从命令行运行的脚本进行了测试。确保您输入的文件名正确。
  • @user1297440:尝试在代码中添加if os.path.isfile(filename) 以检查文件是否存在。
【解决方案2】:

由于您使用的是 Windows,因此您可以尝试在输入文件名时使用 /(正斜杠)或使用双反斜杠作为路径分隔符 \\

要输入您的文件名,您可以尝试e:/python/ex15_sample.txte:\\python\\ex15_sample.txt

【讨论】:

  • 嗯。当我使用 e:\\python\\ex15_sample.txt 时它可以正常工作,但是当我像 e:/python/ex15_sample.txt 这样键入它时,它会从文件 ex15_sample.txt 中打印 1 行,然后给出语法错误:无效语法
  • 好的,这是因为字符串中的 `\` 通常表示 escape character - 但对于文件名,您实际上需要正常的 `\`,并且只有在转义 ` 时才会得到这个\` 像这样在它前面添加一个 `\\`。
  • 好的,我理解双斜杠部分和斜杠是转义字符,但我不明白为什么它只打印 1 行然后给出语法错误
【解决方案3】:

我使用了以下程序终于让它工作了:

print "Type your filename:"

filename = raw_input(">")

txt = open(filename)

print txt.read()

我有点困惑为什么 OP 使用 %r 格式化程序。我没有使用它,我的程序仍然有效。有什么我想念的吗?谢谢。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多