使用变量传递文件名时Jython找不到文件

时间:2013-07-13 07:06:42

标签: jython

所以这是问题的人,

我有一个非常简单的小程序,它从文件中读取一些设置细节(使其可以重复用于其他数据集)并将它们存储到变量中。

然后使用其中一个变量打开另一个我需要写一些结果的文件,以及各种搜索参数。

当将变量传递给.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=\"
\"

编辑:删除工作代码,缩小问题区域和更新代码以使用直接引用而不是相对代码。

3 个答案:

答案 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