0

それでは、問題はここにあります。

ファイルからいくつかのセットアップの詳細を読み取り (他のデータ セットで再利用できるようにするため)、それらを変数に格納する非常に単純な小さなプログラムがあります。

次に、それらの変数の 1 つを使用して別のファイルを開き、結果を書き込む必要があります。また、さまざまな検索パラメーターも使用します。

変数を .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 は、読み取っている Web サイト データのどこにもありません。各読み取りの最後の文字を削除すると、次のようになります。

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")

この2つには違いがあります。コードの最初の部分で、二重スラッシュはエスケープです。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.abspathJython の実装が 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 に答える