からそれに次のメソッドを複数の行を書き開きます。は、CSVは、一度ファイルやループのpython
generateCSVfile(name, fileDescription, filePath+"/"+name, md5Hash)
私は、ファイルを生成する方法を見つけるオープンのままに、上記のメソッドを呼び出すと、すべてのテキスト自体をオーバーライドファイルなしでそこに書かれているしようとしています。
からそれに次のメソッドを複数の行を書き開きます。は、CSVは、一度ファイルやループのpython
generateCSVfile(name, fileDescription, filePath+"/"+name, md5Hash)
私は、ファイルを生成する方法を見つけるオープンのままに、上記のメソッドを呼び出すと、すべてのテキスト自体をオーバーライドファイルなしでそこに書かれているしようとしています。
ファイルは、プログラムの実行ごとに一度空にする必要がありますが、実行中に複数回の追加、あなたは常にだけでグローバル(またはクラスメンバーの状態)を使用することができる場合にそれが一度だけ開いていることを確認してください。
import atexit
csvfile = None
def generateCSVfile(fileName,fileDescription,fileLocation,md5Hash):
global csvfile
if csvfile is None:
# Lazily open file on first call
csvfile = open('deploymentTemplate.csv', 'w')
atexit.atexit(csvfile.close) # Close cleanly on program exit
try:
csvwriter = csv.writer(csvfile, quoting=csv.QUOTE_MINIMAL, newline='')
# do whatever writing you need to csvwriter
finally:
csvfile.flush() # Match behavior of repeated with/open, force predictable flush
関与する複数のCSVファイルがあるかもしれない場合は、書き込みを行うには、インスタンスの状態とメソッドを持つクラスを使用する場合がありますので、各ファイルは独立して何回も一度クリアして追加することができます。この場合、開いているファイルハンドルの数の制限のため、各使用時にappendのための再オープンは遅くなりますが、一度開いて開いておくよりも安全です。クラスがあまりにも任意のファイル名のシングルトンがあるので、あなたはキャッシュを使用することができます。
import weakref
class CSVGenerator:
CACHE = {}
CACHELOCK = threading.Lock()
def __new__(cls, csvfilename):
canonicalname = os.path.realpath(csvfilename)
newself = super().__new__(cls)
with cls.CACHELOCK:
self = cls.CACHE.setdefault(canonicalname, newself)
if newself is self:
# First time we opened this file, clear file and initialize instance
with open(canonicalname, 'w') as f:
pass
self.csvfilename = canonicalname
self.appendlock = threading.Lock()
return self
def generateCSVfile(self, fileName, fileDescription, fileLocation, md5Hash):
with newself.appendlock, open(self.csvfilename, 'a', newline='') as csvfile:
createRow = csv.writer(csvfile, quoting=csv.QUOTE_MINIMAL)
# Perform writes to file
クラスの使用法は、次のいずれかとなります。簡単にインスタンスを取得
CSVGenerator(somecsvfilename).generateCSVfile(...args...)
(必要であれば、それを作成します)一度書き込むか、インスタンスを作成して保存して再利用することができます(キャッシュルックアップのオーバーヘッドは機能しますが、機能的には同じです)。
使用:open('deploymentTemplate.csv', 'a')
値を追加します。
構文:open(<file_name> [,<mode>])
異なるモードがあります:ファイルのみのみ記述するための
'w'
を読まれるとき
'r'
ことができます(同じ名前を持つ既存のファイルが消去されます)'a'
は、追加するファイルを開き、ファイルに書き込まれたデータはすべて自動的に末尾に追加されます( )。'r+'
は、読み取りと書き込みの両方のためにファイルを開きます。
mode引数はオプションです。 'r'が省略されていると仮定します。
例:
with open("test.txt", "a") as myfile:
myfile.write("appended text")
はい、私は考えましたが、このファイルは週に数回実行される可能性があります。プロジェクトが最初に実行されたときにファイルをクリアしてから追加できるとします。 – Drew1208
ファイルを開いて空の書込みを行い、 ''a' 'モードで開きます。または、この 'file.seek(0); file.truncate()'(ファイルの内容を消去する)を行うことができます。 –