0

那么问题来了,伙计们,

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

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

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

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

4

3 回答 3

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]
于 2013-07-15T06:34:20.767 回答
0

我可能不对,但我认为这就是正在发生的事情。

你说这很好用:

file = open('C:\\Users\\James\\Desktop\\comics\\comiclinksqc.txt', "wt")

但这不会:

# After reading three lines
linksfile = read.readline()
file = open(linksfile, "wt")

这两者之间是有区别的。在第一段代码中,双斜杠是escapes。当 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代表“原始” ;它可以防止 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
于 2013-07-14T21:11:00.200 回答
0

我正在尝试创建一个脚本,该脚本将列出数据源名称并显示连接池利用率(池连接,空闲池大小扩展)但是在列出连接池时面临问题,如果数据源名称之间有空格名称如“默认数据源”然后它是列表列表“默认数据源,它没有将数据源名称正确解析到下一个函数。

datasource = AdminConfig.list('DataSource', AdminConfig.getid( '/Cell:' 
+ cell + '/')).splitlines()                                             
for datasourceID in datasource:                                         
        datasourceName = datasourceID.split('(')[0]                     
        print datasourceName 

如果可能,请您帮忙给我发邮件至 bubuldey@gmail.com 问候,Bubul

于 2014-06-08T08:17:26.323 回答