所以这是问题的人,
我有一个非常简单的小程序,它从文件中读取一些设置细节(使其可以重复用于其他数据集)并将它们存储到变量中。
然后使用其中一个变量打开另一个我需要写一些结果的文件,以及各种搜索参数。
当将变量传递给.open()函数时,它无法说它无法找到该文件,但是当传递完全相同的信息,但是作为书写字符串而不是变量时,它可以正常工作。
这是一个已知问题,还是我做错了什么?
代码(问题位加粗)
def urlTrawl(filename):
import urllib
read = open(getMediaPath(filename), "rt")
baseurl = read.readline()
orgurl = read.readline()
lasturlfile = read.readline()
linksfile = read.readline()
read.close()
webpage = ""
links = ""
counter = 0
lasturl = ""
nexturl = ""
url = ""
connection = ""
try:
read = open(lasturlfile, "rt")
lasturl = read.readline()
except IOError:
print "IOError"
webpage = connection.read()
connection.close()
**file = open(linksfile, "wt")**
file.close()
file = open(lasturlfile, "wt")
file.write(nexturl)
return 1
传递的信息
http://www.questionablecontent.net/
http://www.questionablecontent.net/view.php?comic=2480
C:\\Users\\James\\Desktop\\comics\\qclast.txt
C:\\Users\\James\\Desktop\\comics\\comiclinksqc.txt
strip\"
src=\"
\"
Pevious
Next
f=\"
\"
编辑:删除工作代码,缩小问题区域和更新代码以使用直接引用而不是相对代码。
答案 0 :(得分:2)
我最终发现了这个问题。
问题是它在我的详细信息文件中每行末尾的\ n中读取,当然\ n不在我正在阅读的网站数据中的任何位置。删除每次读取的最后一个字符就可以了:
baseurl = baseurl[:-1]
orgurl = orgurl[:-1]
lasturlfile = lasturlfile[:-1]
linksfile = linksfile[:-1]
search1 = search1[:-1]
search2 = search2[:-1]
search3 = search3[:-1]
search4 = search4[:-1]
search5 = search5[:-1]
search6 = search6[:-1]
答案 1 :(得分:0)
我可能不对,但我认为这就是发生的事情。
你说这很好用:
file = open('C:\\Users\\James\\Desktop\\comics\\comiclinksqc.txt', "wt")
但这并不是:
# After reading three lines
linksfile = read.readline()
file = open(linksfile, "wt")
这两者之间存在差异。在第一段代码中,双斜杠是转义。当Python完成解析时,它们会解析为单斜杠。像这样:
>>> print 'C:\\Users\\James\\Desktop\\comics\\comiclinksqc.txt'
C:\Users\James\Desktop\comics\comiclinksqc.txt
但是当您从文件中读取相同的文本时,没有解析文本。这意味着存储在变量中的字符串仍然具有双斜杠。
尝试此命令。我打赌它的失败方式与您在以下位置读取文件路径的方式相同:
file = open(r'C:\\Users\\James\\Desktop\\comics\\comiclinksqc.txt', "wt")
r
代表" raw&#34 ;;它阻止Python解释转义字符。如果它以同样的方式失败,那么双斜线就是你的问题。要修复它,在您的文件中,您需要删除双斜杠:
C:\Users\James\Desktop\comics\comiclinksqc.txt
这不是CPython 2.7中的问题;我也打赌它不在3.x中。 CPython以某种方式解释双斜杠,它们实际上是单斜杠(在大多数情况下,至少是)。所以这可能是Jython特有的问题。
如果不清洁的路径导致错误,您可能需要考虑做一些事情来清理它们。 os.path.abspath
可能会有所帮助,但我不能说Jython的实施是否与CPython的实施一样:
>>> print os.path.abspath(r'C:\\Users\\James\\Desktop\\comics\\comiclinksqc.txt')
C:\Users\James\Desktop\comics\comiclinksqc.txt
>>> print os.path.abspath(r'C:/Users/James/Desktop/comics/comiclinksqc.txt')
C:\Users\James\Desktop\comics\comiclinksqc.txt
答案 2 :(得分:0)
我正在尝试创建一个脚本,该脚本将列出数据源名称并显示连接池利用率(池化连接,免费池大小分机)。 但是在列出连接池时遇到问题,如果数据源名称之间有空格,那么名称就像"默认数据源" 然后它是列表列表"默认数据源,它没有正确地将数据源名称解析为下一个函数。
datasource = AdminConfig.list('DataSource', AdminConfig.getid( '/Cell:'
+ cell + '/')).splitlines()
for datasourceID in datasource:
datasourceName = datasourceID.split('(')[0]
print datasourceName
如果可能请求您提供帮助,请发送电子邮件至bubuldey@gmail.com 问候, Bubul