【问题标题】:Updating variables in a list using python's csv module使用 python 的 csv 模块更新列表中的变量
【发布时间】:2012-10-11 08:08:56
【问题描述】:

这是我所拥有的:

import csv

a=8   
print a    
mylist = [a,'2','3']    
myfile = open("myfile.csv", "wb") # csv files should always be opened in binary mode 
wr = csv.writer(myfile, quoting=csv.QUOTE_ALL)    
wr.writerow(mylist)    
a = a + 1    
print a    
wr.writerow(mylist)

打印的结果是8 和9,正如我所料。当我打开我创建的文件时,我得到了结果:

"8","2","3"     
"8","2","3"

第一行是我所期望的,但第二行以"8"而不是"9"开头。我知道我可以通过在重新定义变量后再次插入 mylist = [a,'2','3'] 来解决此问题,但是有人介意向我解释为什么我必须重新插入列表行或为什么变量没有在列表中自动更新?是否可以使用另一种方法来避免每次要更新变量时都必须重新插入列表行?

【问题讨论】:

  • @Tichodroma - 我相信您编辑了我的帖子以改进格式。谢谢你这样做。请问我应该去哪里获取格式指南,这样我的工作以后就不需要清理了?

标签: python csv python-2.7


【解决方案1】:

这是行:

a = a + 1

您在其中将a 重新分配给了一个新整数,该整数与之前的值无关。

无论如何,整数是不可变的变量,除了重新分配之外,你不能对它做任何其他事情。

作为@thg435 cmets,列表操作some_list = some_list + [5] 将具有相同的效果。但是,列表是可变对象,您可以使用 some_list.append(5),它会修改列表并将其更改反映到 csv 文件中。

如果您使用可变对象(list、dict),您可以修改它们的值:

import csv
a=8   
mylist = [a,'2','3']    
with open("myfile.csv", "wb") as myfile:
    wr = csv.writer(myfile, quoting=csv.QUOTE_ALL)    
    wr.writerow(mylist)    
    mylist[0] = mylist[0] + 1  ####  here you modify a list
    wr.writerow(mylist)

【讨论】:

  • 不变性在这里无关紧要。 some_list = some_list + [5] 会产生完全相同的效果。
【解决方案2】:

考虑

a = 1
mylist = [a,2,3]
print mylist # [1,2,3]

mylist是一个包含三个元素的结构体,第一个元素指向变量a,其值为1

----------       -------------
| mylist | --->  |   |  2|  3|
----------       -------------
                   |
                   v   
                 -----      -----
                 | a | ---> | 1 |
                 -----      -----

现在让我们更改a:

   a = a + 1
   print mylist # still [1,2,3]

我们创建了一个新变量并将其命名为a,因此从第一个变量中撤消了该名称。列表的第一个元素仍然指向第一个(现在未命名)多变的。这两个变量没有任何关系。

----------       -------------
| mylist | --->  |   |  2|  3|
----------       -------------
                   |
                   v   
                 -----      -----
                 | ? | ---> | 1 |
                 -----      -----

-----      -----
| a | ---> | 2 |
-----      -----

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-07-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多