在Python

时间:2015-05-12 18:50:56

标签: python csv

没有太多的Python(3.4)经验,但我正在开发一个程序,可以让你添加号牌并编辑状态'。这是一个停车计划,因此状态为In / Out。

我唯一的问题是我不知道如何在输入后编辑CSV文件中的特定字段。例如:从In到Out。

例如CSV:

NH08OTR, 2008, Vauxhall, Corsa, Blue, In

我希望能够更改' In'中的最后一个字段。到' Out'但是CSV将具有可变数量的行,所以我只希望它在特定的登记牌上进行。示例如下:

Please choose a number plate to change the status of: NH08OTR
Status change: Out
Status successfully changed to 'Out'

然后我希望它改变' In'在CSV上出来。

希望您理解并感谢阅读。

2 个答案:

答案 0 :(得分:1)

鉴于csv:

for /f "delims=" %%a in ('net user ^| findstr /i adm') do set userlist=%%a
call :process %userlist%
goto :eof

:process
if {%1}=={} goto :eof

::-----------
rem Do something with %1 here
echo %1
::-----------

shift
goto :process

我们要打开它,在内存中编辑它,然后保存编辑,因此:

NH08OTR, 2008, Vauxhall, Corsa, Blue, In
NH08OTY, 2008, Vauxhall, Corsa, Blue, Out
NH08OTZ, 2008, Vauxhall, Corsa, Blue, In

答案 1 :(得分:1)

假设您有一个内容为plate_status.csv的文件

""" 
NH08OTR, 2008, Vauxhall, Corsa, Blue, In
NH0873R, 2004, Vauxhall, Corsa, Red, Out
...
"""

等。只要文件不是太大,我会先读取整个文件,然后更新并覆盖:

import csv

def update_status( filename, plate, status ):
    # read and update
    with open( filename) as f:
        reader = csv.reader( f, delimiter=',' )
        line_dict = dict([ ( x[0].strip() , map(lambda y:y.strip() ,x[1:])) for x in reader] )
        line_dict[ plate ][-1] = status

    # save new
    with open( 'plate_status.txt', 'w') as f:
        writer = csv.writer(f )
        new_file_rows = map( lambda x : [ x[0] ]+ x[1], line_dict.iteritems() )
        writer.writerows( new_file_rows )            

update_status( 'plate_status.csv', 'NH08OTR', 'Out' )

现在文件plate_status.csv显示为:

""" 
NH08OTR, 2008, Vauxhall, Corsa, Blue, Out
NH0873R, 2004, Vauxhall, Corsa, Red, Out
...
"""