Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/302.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 打开.csv文件编辑一个字段,写回.csv文件_Python_Csv_Formatting - Fatal编程技术网

Python 打开.csv文件编辑一个字段,写回.csv文件

Python 打开.csv文件编辑一个字段,写回.csv文件,python,csv,formatting,Python,Csv,Formatting,因此,我有一个.csv文件,其中包含姓名、lat、lon和电话号码;用逗号分隔。我需要打开文件,将电话号码编辑成更清晰的格式,然后将其写回文件 有一个很好的解决方案来编辑电话号码 不确定解决这个问题的最佳方法。非常感谢您的帮助。谢谢 import csv def phone_format(n): return format(int(n[:-1]), ",").replace(",", "-") +n[-1] with open('sample.csv', 'rU') as csvfi

因此,我有一个.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

您不应该在行上格式化而不是spotreader吗?这对我从.csv文件中读取它很好。我添加了一个忽略空字符串的检查。此外,spotwriter也无法工作,因为您没有以写入模式打开文件。”“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

这是假设您只想编辑第一个电话号码,如果您还想编辑第二个电话号码,您必须进行一些额外的编程。

已经解决了。我在另一篇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])])

不清楚这里的问题是什么,您知道如何将csv内容加载到内存中,如何格式化电话号码,以及如何将数据帧写入csv文件。我只是建议使用panda的函数:
load_csv
to_csv
当我尝试将+'\n'添加到spotwriter的末尾时。writerow我得到一个类型错误:只能将列表(而不是“str”)连接到列表。对那个问题有什么想法吗?“\n”基本上是一个角色。writerow函数只能将列表写入行中(对于列表中的每个参数,将在该行中创建一个参数)。这就是writerow函数的参数必须是列表的原因。您可以这样做:writerow([row[0],row[1],'\n']),但我不知道为什么要这样做,因为每一行都会自动写入新行。你能告诉我为什么你想在结尾加一个换行符吗?至于你对空格go的问题,我不知道为什么它会出现在你面前。它对我来说非常好,结尾没有空格。在将每个参数写入一个新的.csv文件以检查其中是否已经有空白之前,是否可以将其打印出来?如果是这样,您可以使用以下命令删除它们:string.replace(“,”)。我想可能需要“\n”来消除空白。我在每次迭代后打印出行,在cmd行输出中没有空格。然而,当我打开文件时,我有所有的空白。搔我的头。你能试着把它打开到excel中,检查一下是否也有空白吗?如果是这样的话,您可以将写入的行再次放入.csv文件中。在任何情况下,只要你记得空格在那里,你可以把它们删掉,如果你再看一遍,这很奇怪,因为它不应该这样做。