Форум сайта python.su
Всем привет. Падает:
def take_head_of_file_four(): with open('D:\\proc\\sales_result_sliced.csv', 'r', newline='') as csvfile, open("D:\\proc\\", "w", newline='') as out_file: reader = csv.DictReader(csvfile) headers = reader.fieldnames for h in headers: fieldnames = ['', str(h)] writer = csv.DictWriter(os.path.join(out_file,str(h),".csv"), fieldnames=fieldnames) counter = 1 writer.writeheader() for row in reader: writer.writerow({'': counter, str(h): row[str(h)]}) counter +=1 #close the files csvfile.close() out_file.close()
take_head_of_file_four() Traceback (most recent call last): File "<ipython-input-36-91a8e40fd006>", line 1, in <module> take_head_of_file_four() File "D:\scripts\Cleancsv.py", line 111, in take_head_of_file_four with open('D:\\proc\\sales_result_sliced.csv', 'r', newline='') as csvfile, open("D:\\proc\\", "w", newline='') as out_file: FileNotFoundError: [Errno 2] No such file or directory: 'D:\\proc\\'
Отредактировано Antonpython (Март 8, 2021 23:09:26)
Офлайн
ifname = r'D:\proc\sales_result_sliced.csv' ofname = r'D:\proc\sales_result_sliced_out.csv' with open(ifname, 'r', newline='') as csvfile, \ open(ofname, "w", newline='') as out_file: ...
ifname = r'D:\proc\sales_result_sliced.csv' ofname = r'D:\proc\sales_result_sliced_out.csv' with open(ifname, 'r', newline='') as csvifile, \ open(ofname, "w", newline='') as csvofile: ...
Отредактировано py.user.next (Март 8, 2021 23:13:25)
Офлайн
Не могу догнать
Падает
def take_head_of_file_four(): ifname = r'D:\proc\sales_result_sliced.csv' ofname = r'D:\proc' with open(ifname, 'r', newline='') as csvifile, open(ofname, "w", newline='') as csvofile: reader = csv.DictReader(csvifile) headers = reader.fieldnames for h in headers: fieldnames = ['', str(h)] writer = csv.DictWriter(os.path.join(csvofile,str(h),".csv"), fieldnames=fieldnames) counter = 1 writer.writeheader() for row in reader: writer.writerow({'': counter, str(h): row[str(h)]}) counter +=1 #close the files csvifile.close() csvofile.close()
Traceback (most recent call last): File "<ipython-input-2-91a8e40fd006>", line 1, in <module> take_head_of_file_four() File "D:\scripts\Cleancsv.py", line 115, in take_head_of_file_four with open(ifname, 'r', newline='') as csvifile, open(ofname, "w", newline='') as csvofile: PermissionError: [Errno 13] Permission denied: 'D:\\proc'
Офлайн
AntonpythonВыше написано, как имена файлов записать.
Не могу догнать
Офлайн
Я сначала так и сделал, но что это поменяло? Точно такие же захардкоженые пути на выходной файл.
Зачем мне файл по одному и тому же пути?
Вы же видите, что мне на каждую новую колонку нужно создавать\менять название сохраняемого файла динамически.
И ошибка касается именно этой части кода.
Я здесь понять не могу, почему оно это сделать не может.
Хорошо. Буду пробовать.
Офлайн
Вот тут посмотри внимательно, как имена файлов указаны. Вот так и пиши.
AntonpythonПотому что ты не понимаешь, как работает функция open() в питоне. proc - это директория. С чего ты взял, что open() может директории открывать? А с того, что ты вообще не знаешь, как функция open() работает, потому что ты не читал ничего. Читай к ней документацию, чтобы знать, что она открывает и как.
Я здесь понять не могу, почему оно это сделать не может.
AntonpythonНельзя писать в тот же файл, из которого ведётся чтение. Если посреди файла случится ошибка, то исходный файл останется испорчен. Поэтому из входного файла ты перегоняешь данные в отдельный выходной файл. А потом, если тебе надо все эти изменения в одном файле произвести, ты просто старый файл удаляешь, а новый переименовываешь в него через пару os.remove() + os.rename().
Зачем мне файл по одному и тому же пути?
Отредактировано py.user.next (Март 9, 2021 09:13:49)
Офлайн
Потому что изначально я правильно написал. Смотри первый экземпляр. Потом попробовал, как ты посоветовал - ну, у меня не получилось. Я начал экспериментировать от исходного понимания того, что я изначально понял.
Кто тебе сказал, что я собираюсь писать в тот же файл, из которого будет вестись чтение?
Мне нужно исходный файл распарсить на колонки. И из каждой колонки сделать новый файл с колонкой id.
А ты мне предлагаешь сделать одни выходной файл. И в него перегонять их исходного.
Это неправильное понимание.
Пока ничего не пробовал. Попробую - подумаю.
Офлайн
Снова уперся.
Короче
Этот работает
def take_head_of_file_four(): with open('D:\\proc\\sales_result_sliced.csv', 'r', newline='') as csvfile, open('D:\\proc\\result.csv', 'w', newline='') as outfile: reader = csv.DictReader(csvfile) counter = 1 fieldnames = ['Id', 'Total'] writer = csv.DictWriter(outfile, fieldnames=fieldnames) writer.writeheader() for row in reader: writer.writerow({'Id': counter, 'Total': row['Total']}) counter +=1 csvfile.close()
def take_head_of_file_four(): with open('D:\\proc\\sales_result_sliced.csv', 'r', newline='') as csvfile: reader = csv.DictReader(csvfile) headers = reader.fieldnames prepath = "D:\\proc\\" counter = 1 for h in headers: spath = os.path.join(prepath, str(h) + ".csv") with open(spath, 'w', newline='') as out_file: fieldnames = ['Id', str(h)] writer = csv.DictWriter(out_file, fieldnames=fieldnames) writer.writeheader() for row in reader: writer.writerow({'Id': counter, str(h): row[str(h)]}) counter +=1 csvfile.close()
Офлайн
AntonpythonВ первом сообщении ты написал
Потому что изначально я правильно написал. Смотри первый экземпляр.
AntonpythonПуть указывает на директорию.open("D:\\proc\\", "w", newline='') as out_file
AntonpythonЕсли ты директорию как место для вывода указываешь, значит, вероятнее всего, ты собрался в тот же файл писать. А иначе зачем указывать директорию без имени файла?
Кто тебе сказал, что я собираюсь писать в тот же файл, из которого будет вестись чтение?
Мне нужно исходный файл распарсить на колонки. И из каждой колонки сделать новый файл с колонкой id.
А ты мне предлагаешь сделать одни выходной файл. И в него перегонять их исходного.
Это неправильное понимание.
AntonpythonТы вообще ничего не знаешь. Если ты думаешь, что ты что-то знаешь, то ты глубоко заблуждаешься. Завышенная самооценка свойственна алкашам. Им кажется, что они очень красивые, очень умные, очень успешные. Только по факту потом заканчивается у них всё совсем не так и они даже иногда это замечают. А то, что ты программируешь, ты будешь бабушкам на подъезде рассказывать.
Говнокод, конечно, колхоз. Но, блин. Я не знаю библиотек.
AntonpythonА вот в h уже строка находится, поэтому str(h) делать не надо. Это не незнание библиотек.for h in headers: spath = os.path.join(prepath, str(h) + ".csv")
>>> import csv >>> >>> lst = ['1,2,3', 'a,b,c', 'aa,bb,cc'] >>> >>> reader = csv.DictReader(lst) >>> reader.fieldnames ['1', '2', '3'] >>> >>> list(reader) [OrderedDict([('1', 'a'), ('2', 'b'), ('3', 'c')]), OrderedDict([('1', 'aa'), ('2', 'bb'), ('3', 'cc')])] >>>
Отредактировано py.user.next (Март 9, 2021 22:50:40)
Офлайн
Спасибо за интерпретацию, конечно)
Если же ты думаешь, что кто-то сидит и следит за всеми твоими топиками на форуме, то ты просто глубоко заблуждаешься.
Я вот смотрю, в другом топике тебе сказали, что csvfile.close() не надо вызывать
- значит все таки следишь…
- я все прекрасно читаю, не волнуйся, я просто все воедино свести еще не успел: сяду снова писать - все эти рекомендации я использую, пока просто идет копипаст своих прежних функций
Но чтобы это знать и проверять и всё видеть прекрасно, нужно изучать питон. А можешь ли ты изучить питон - вот это уже вопрос.
- я то смогу…
Сможешь ли ты нормальным более-менее стать… Вот это уже вопрос…
Здесь все такие бешенные анальники(как говорит небезызвестный психотерапевт Вероника) сидят или только выборочно…
Трудовые будни программиста) Вокруг одни алкаши и анальники… и так каждый день…
Офлайн