#python
#python
Вопрос:
У меня есть файл .csv со многими строками и структурой:
YYY-MM-DD HH first_name quantity_number second_name first_number second_number third_number
У меня есть скрипт на python для преобразования разделителя из пробела в запятую, и он работает нормально.
import csv
with open('file.csv') as infile, open('newfile.dat', 'w') as outfile:
for line in infile:
outfile.write(" ".join(line.split()).replace(' ', ','))
Мне нужно изменить в newfile.dat позицию каждого значения, например, поместить значение HH в позицию 6, значение second_name в позицию 2 и т.д.
Заранее спасибо за вашу помощь.
Комментарии:
1. Пожалуйста, разместите свой код, сделав отступ в каждой строке на 4 пробела с новой строкой до и после вашего кода.
2. В чем заключается ваш вопрос? SO не является бесплатным генератором кода. Мы не делаем вашу работу за вас.
3. Возможно, вам окажется проще использовать встроенный
csv
пакет, а не разбирать и записывать файл вручную.
Ответ №1:
Если вы импортируете csv
, можете также использовать это
import csv
with open('file.csv', newline='') as infile, open('newfile.dat', 'w ', newline='') as outfile:
read = csv.reader(infile, delimiter=' ')
write = csv.writer(outfile) #defaults to excel format, ie commas
for line in read:
write.writerow(line)
Используйте newline=''
при открытии файлов csv, иначе вы получите файлы с двойным интервалом.
Это просто записывает строку так, как она есть во входных данных. Если вы хотите изменить это перед записью, сделайте это в for line in read:
цикле. line
это список строк, порядок которых вы можете изменить любым количеством способов.
Один из способов изменить порядок значений — использовать operator.itemgetter
:
from operator import itemgetter
getter = itemgetter(5,4,3,2,1,0) #This will reverse a six_element list
for line in read:
write.writerow(getter(line))
Комментарии:
1. OP хочет изменить значение перед записью в файл — необходимо изменить в newfile.dat позицию каждого значения, например, поместить значение HH в позицию 6, значение second_name в позицию 2 и т. Д
2. @DineshPundkar, не зная точного преобразования, которое он ищет, трудно помочь.
3. @DineshPundkar, да, мне только нужно изменить положение значений. Значения продолжаются с тем же значением исходного файла, но в другой позиции в новом файле.
Ответ №2:
Чтобы изменить порядок элементов, основным способом может быть следующее:
split_line = line.split(" ")
column_mapping = [9,6,3,7,3,2,1]
reordered = [split_line[c] for c in column_mapping]
joined = ",".join(reordered)
outfile.write(joined)
Это разбивает строку, упорядочивает ее в соответствии с column_mapping
, а затем объединяет ее обратно в одну строку (через запятую)
(в вашем коде не включайте column_mapping
в цикл, чтобы избежать его повторной инициализации)