【问题标题】:Reading, Adding to and saving a CSV File using Python.使用 Python 读取、添加和保存 CSV 文件。
【发布时间】:2011-08-30 12:03:34
【问题描述】:

我在编写一些 python 脚本时遇到了一些问题。整个脚本的想法是读取包含 4 列“朋友”的 csv 文档。是他们的姓名、地址、电话号码和生日。现在,我已经写了一些代码,但是有一些问题。

  1. 我有 load_friends 定义的代码,但它似乎只是打开 csv 的代码,而不是在加载函数时打开 csv。
  2. 我真的很难找到合适的教程来编写在函数之后向 csv 文件添加新行的代码,因此 add_friend(姓名、地址、ph 号、生日),输入,然后将其添加到csv。

如果有人可以提供任何帮助,将不胜感激!

我的代码:

def load_friends():
    """Loads the friends.csv file from disk
    """
reader = csv.reader(open("friends.csv", "rb"))
for row in reader:
    print row


def save_friends():
    print row

def add_friend():
    """Writes a new entry to friends.csv via Python commands
    """
    aCSVReader = csv.reader(open('friends.csv', 'rb'), delimiter=' ', quotechar='|')
    for row in aCSVReader:
        print ', '.join(row)

【问题讨论】:

  • 以后请直接内联代码。如果它很大,请内联相关部分并链接到整个项目。

标签: python csv


【解决方案1】:

csv 假定每行之间有换行符,因此以下内容应该可以满足您的所有需求。

writer = csv.writer(open('friends.csv', 'ab'))  
.....      
def add_friend(name, address, ph_number, birthday):
    """write a row to the friends.csv file
    """
    writer.writerow([name, address, ph_number, birthday])

【讨论】:

  • 我还建议你将 open 从这个文件移到某个“外部”(一个 open_writer() 函数?),因为我很确定你会写不止一行跨度>
  • 凯文是什么意思?问候,史蒂夫
【解决方案2】:

load_friends 打开 csv,加载并将其内容转储到标准输出。

add_friend 做 same 的事情,我不明白你在做什么。

一个更有用的版本可能是:

def load_friends ():
    with open('friends.csv', 'rb') as f:
        for name, phone, address, birthday in csv.reader(f, delimiter=' ', quotechar='|'):
            # do something with name, phone, etc.


def add_friend (name, phone, address, birthday):
    with open('friends.csv', 'ab') as f:
        newrow = [name, phone, address, birthday]
        csv.writer(f, deliminter=' ', quotechar='|').writerow(newrow)

add_friend 在文件“friends.csv”的末尾添加一行(以“a”模式打开)。

【讨论】:

  • 感谢 Makeroo 的输入!但是,我对你用#do something with name, phone 等写的东西感到迷茫?
  • 他是说在不对数据做任何事情的情况下加载和解析文件是没有意义的。如果您只想打印那里的内容,则可以更改函数名称。
【解决方案3】:

这里有一些提示:

在下面的函数中,你需要修复缩进……这在 Python 中很重要。不知道这是剪切和粘贴的产物还是什么,但它很容易修复。

def load_friends():
    """Loads the friends.csv file from disk
    """
reader = csv.reader(open("friends.csv", "rb"))
for row in reader:
    print row

add_friend() 中,您正在打开文件以进行读取...您可能希望以“ab”模式(附加二进制文件)打开它。如果您以写入模式 ('w') 打开它,现有内容将被清除。除非您将所有朋友的副本保存在内存中并每次都将它们全部写出来,否则这不会达到您的预期。

另外,为什么将分隔符字符更改为''?如果是标准 CSV,这可能也不是您想要的。

【讨论】:

  • 如果您以写入模式 ('w') 打开它,现有内容将被清除。这正是刚刚发生的事情。我现在正在运行 Kevin 的 add_friend 代码。有什么建议吗?
  • 如果您实际上是在执行添加一行的原子操作,请考虑使用with 打开文件。它将在块的末尾自动为您关闭文件。见this
  • @Keith.lane,'b' 模式是必要的。 CSV 模块需要它,因为它自己进行换行管理。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-12
  • 1970-01-01
  • 2017-03-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多