こんにちは、ご覧いただきありがとうございます:)
2500 行を超えるテキスト タイルがあり、各行にはビデオ ファイルに関する情報が含まれています。タグの 1 つ (いわば) は監視状態用です。ある値から別の値に変更する方法、または設定されていない場合は新しい値を追加する方法を探しています。以下のコードは機能しますが、検索値ごとにファイルを開いたり閉じたりする必要があります。これは非常に遅いことを意味します。ファイルを一度開き、すべての検索を 1 回のパスで実行する方法を提案できる人はいますか?
ありがとう
for x in y:
print ' --> ' + x['title'].encode('utf-8')
searchValue = x['movieid']
addValue = "\t_w\t1\t"
checkvalue = "\t_w\t0\t"
for line in fileinput.input(file, inplace=1):
if searchValue in line:
if checkvalue in line:
line = line.replace(checkvalue, addValue)
elif not addValue in line:
line = line + addValue
sys.stdout.write(line)
これが私が最終的に得たものです。皆様のご意見に感謝します。
myfile_list = open(file).readlines()
newList = []
for line in myfile_list:
for x in y:
if x['movieid'] in line:
print ' --> ' + x['title'].encode('utf-8')
if checkvalue in line:
line = line.replace(checkvalue, addValue)
elif not addValue in line:
line = line.replace('\n', addValue+'\n')
newList.append(line)
outref = open(file,'w')
outref.writelines(newList)
outref.close()
編集 エンコーディングの問題に遭遇しました。ファイルは utf-8 でエンコードされていますが、エラーが発生するか、検索値が
'Hannibal - S01E01 - Ap\xe9ritif.mkv'
ファイル内の一致する行は次のようになります
_F /share/Storage/NAS/Videos/Tv/Hannibal/Season 01/Hannibal - S01E01 - Apéritif.mkv _rt 43 _r 8.4 _s 1 _v c0=h264,f0=24,h0=720,w0=1280 _IT 717ac9d _id 1671 _et Apéritif _DT 7142d53 _FT 7142d53 _A 4212,4211,2533,4216 _C T _G j|d|h|t _R GB:TV-MA _T Hannibal _U thetvdb:259063 imdb:tt2243973 _V HDTV _W 4210 _Y 71 _ad 2013-04-04 _e 1 _ai Apéritif _m 1117
codecs.open および decode().encode() オプションを試しましたが、常にエラーが発生します。行内のif searchValue を実行できるため、行内のアクセント付きの文字が問題であると考えています:行にない場合アクセントのある文字。これは私が現在試していることですが、他の方法も受け入れています。
if os.path.isfile("/share/Apps/oversight/index.db"):
newfile = ""
#searchValueFix = searchValue.decode('latin-1', 'replace').encode('utf8', 'replace')
#print searchValueFix
#print searchValue
addValue = "\t_w\t1\t"
replacevalue = "\t_w\t0\t"
file = open("/share/Apps/oversight/index.db", "r")
for line in file:
if searchValue in line:
if replacevalue in line:
line = line.replace(replacevalue, addValue)
elif not addValue in line:
line = line.replace(searchValue+"\t", searchValue+addValue)
newfile = newfile + line
file.close()
file = open("/share/Apps/oversight/index.db", "w")
file.write(newfile)
file.close()
newfile = ""