Откройте файл .csv, отредактируйте одно поле и запишите обратно в файл .csv. - PullRequest
0 голосов
/ 16 мая 2018

Итак, у меня есть файл .csv с именами, адресом lat, lon и номером телефона; через запятую Мне нужно открыть файл, отредактировать номер телефона в более четком формате, а затем записать его обратно в файл.

Есть хорошее решение для редактирования телефонных номеров Здесь

Не совсем уверен, что лучший способ решить эту проблему. Любая помощь очень ценится. Благодарю.

import csv

def phone_format(n):
    return format(int(n[:-1]), ",").replace(",", "-") +n[-1]

with open('sample.csv', 'rU') as csvfile:
    spotreader = csv.reader(csvfile)
    spotwriter = csv.writer(csvfile)
    for row in spotreader:
        spotwriter.writerow([0] + phone_format(spotreader[1]))

Это не работает. Не совсем уверен, как получить то, что я ищу.


Пример моего файла CSV ниже

Jason Schow,,5016098648
Dena VanGorder,,6074621816
Lindsey McNabb,3066533971,3066505001
Jeff Wozniak,3066531566,3069420647
Victoria Norton,3067692840,3067697062
Benjie Butikofer,3067692107,3067697108
Jessica Duede,,3062813158
Pete Vogeh,3063776261,3069890349
Melissa Kwasney,,3069412583

Тип вывода в файл .csv, который я ищу ниже:

Jason Schow,,501-609-8648
Dena VanGorder,,607-462-1816
Lindsey McNabb,306-653-3971,306-650-5001
Jeff Wozniak,306-653-1566,306-942-0647
Victoria Norton,306-769-2840,306-769-7062
Benjie Butikofer,306-769-2107,306-769-7108
Jessica Duede,,306-281-3158
Pete Vogeh,306-377-6261,306-989-0349
Melissa Kwasney,,306-941-2583

Ответы [ 2 ]

0 голосов
/ 17 мая 2018

Понял.Я наткнулся на это в другой статье stackoverflow. Статья здесь

Исправленный код выглядит следующим образом.Еще раз спасибо за помощь и предложения.

import csv

def phone_format(n):
    return format(int(n[:-1]), ",").replace(",", "-") +n[-1]

with open('sample.csv', 'rU') as csvfile:
    with open('sampleOutput.csv', 'w', newline='') as csvfile2:
        spotreader = csv.reader(csvfile)
        spotwriter = csv.writer(csvfile2)
        for row in spotreader:
            if row[1] != '' and row[2] != '':
                spotwriter.writerow([row[0], phone_format(row[1]), phone_format(row[2])])
            elif row[1] != '' and row[2] == '':
                spotwriter.writerow([row[0], phone_format(row[1]), (row[2])])
            elif row[1] == '' and row[2] != '' :
                spotwriter.writerow([row[0], (row[1]), phone_format(row[2])])
0 голосов
/ 17 мая 2018

Разве вы не должны форматировать строку, а не читатель?Это прекрасно работает для меня, читая его из файла .csv.Я добавил проверку на игнорирование пустых строк.Также спотрайтер не будет работать, так как вы не открываете файл в режиме записи.«rU» только для чтения.То, что вы хотите сделать, это создать новый файл .csv и записать вывод там следующим образом:

import csv

def phone_format(n):
    return format(int(n[:-1]), ",").replace(",", "-") +n[-1]

with open('sample.csv', 'rU') as csvfile:
    with open('sampleOutput.csv', 'w') as csvfile2:
        spotreader = csv.reader(csvfile)
        spotwriter = csv.writer(csvfile2)
        for row in spotreader:
            if row[1] != '':
                spotwriter.writerow([row[0], phone_format(row[1]), row[2]])
            else:
                spotwriter.writerow([row[0], row[1], row[2]])

На входе находится ваш файл .csv.

Вывод:

Jason Schow,,5016098648
Dena VanGorder,,6074621816
Lindsey McNabb,306-653-3971,3066505001
Jeff Wozniak,306-653-1566,3069420647
Victoria Norton,306-769-2840,3067697062
Benjie Butikofer,306-769-2107,3067697108
Jessica Duede,,3062813158
Pete Vogeh,306-377-6261,3069890349
Melissa Kwasney,,3069412583

Предполагается, что вы хотите отредактировать только первый номер телефона, если вы хотите отредактировать и второй номер телефона, вам придется выполнить дополнительное программирование.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...