ファイルの最後の文字を置き換えたいだけです。その理由は、私がファイルに書き込むとき、ファイルに書き込む最後の時点で、末尾に追加された,
があるからです。可能であれば、,
を最後に書いておきたいのではなく、]
に置き換えたいと思っています。ここに私の試みです:私は、ファイルの終わりを追求したいtextFile.seek(-1, os.SEEK_END)
に着くまでファイルの最後の文字を簡単に置き換える方法は?
reader = csv.DictReader(open(restaurantsCsv), delimiter=';')
with open(fileName, 'w+') as textFile:
textFile.write('[')
for row in reader:
newRow = {}
for key, value in row.items():
if key == 'stars_count' or key == 'reviews_count':
newRow[key] = float(value)
else:
newRow[key] = value
textFile.write(json.dumps(newRow) + ',')
textFile.seek(-1, os.SEEK_END)
textFile.truncate()
textFile.write(']')
それはすべてが正常に動作し、私は、ファイル内の最後の,
を削除したいが、私はio.UnsupportedOperation: can't do nonzero end-relative seeks
を言ってエラーが出ます。したがって、ファイルをwb+
のパラメータで開くようにしましたが、それを行うと、文字列ではなくバイトだけをファイルに書き込むことができます。ファイル内の最後の文字を,
の代わりに]
に置き換えることはできますか? (ここに示すように)私は単純に、読んでファイルを切り捨て、最後]
を書くために再度ファイルを開くには、ファイルを開くことができます知っているが、それは非効率です:
with open(filename, 'rb+') as filehandle:
filehandle.seek(-1, os.SEEK_END)
filehandle.truncate()
with open(filename, 'a') as filehandle:
filehandle.write(']')
任意の助けをいただければ幸いです。ありがとう!
であります '、'から来る?ファイルを生成するためのコードはどこですか?ファイルの最後の文字を上書きする代わりに、最初に問題が発生しないようにすることをおすすめします。症状ではなく原因を修正します。 – Chris
@Chris実際にはここから来ています: 'textFile.write(json.dumps(newRow)+ '、')'ファイルに書き込むとき、ファイルに書き込む最後の行に '、'が含まれています。問題は、 '、'が最後の行を除くすべての場合に存在することです。 – user1871869
ファイル全体に有効なJSONが含まれている必要がありますか?手動で構築しないでください。あなたはすでに個々の行に対して 'json.dumps()'を使っています。なぜあなたは完全な出力のためにそれを使用していないのですか? – Chris