Вот тест, который я создал, чтобы воссоздать проблему, с которой я столкнулся, когда использовал tempfile.NamedTemporaryFile(). Проблема в том, что когда я использую tempfile, данные в моем CSV усекаются с конца файла.Почему tempfile.NamedTemporaryFile() урезает мои данные?
Когда вы запустите этот тестовый скрипт, temp2.csv будет усечен, а temp1.csv будет такого же размера, как и исходный CSV.
Я использую Python 2.7.1.
Вы можете скачать образец CSV из http://explore.data.gov/Energy-and-Utilities/Residential-Energy-Consumption-Survey-RECS-Files-A/eypy-jxs2
#!/usr/bin/env python
import tempfile
import shutil
def main():
f = open('RECS05alldata.csv')
data = f.read()
f.close()
f = open('temp1.csv', 'w+b')
f.write(data)
f.close()
temp = tempfile.NamedTemporaryFile()
temp.write(data)
shutil.copy(temp.name, 'temp2.csv')
temp.close()
if __name__ == '__main__':
main()
Это сработало, но кажется немного противоречивым. Кажется, что temp.flush() должен идти до temp.write (data) в моем сознании. Это то, что я пробовал раньше, и это не сработало. Хотелось бы я лучше понять, почему это работает, чтобы поместить его после write(). – Brent