没有太多的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上出来。
希望您理解并感谢阅读。
答案 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
...
"""