我使用的是Python 2.7,只使用标准模块。
我有一个庞大的数据文件,其中包含大量有关汽车事件的信息。我正在尝试复制有关单个汽车事件类型的数据(例如加速)并将其写入单独的文件。我当前的方法将数据存储在一个表中 - 我在列表中使用了列表 - 然后将其写入单独的文件(参见下面的示例表)。
Event Type | Data Location Start | Data Location End
--------------------------------------------
Accelerate | 99 | 181
Break | 182 | 263
Horn | 264 | 351
Accelerate | 352 | 434
...and so on
The table above in Python would be:
event_list = [['Accelerate', 99, 181],
['Break', 182, 263],
['Horn', 264, 351],
['Accelerate', 352, 434]]
问题:每次我追加一行时,所有其他行都会更改为该追加的行。我在下面提供了我的代码和控制台输出。
#!/usr/bin/python
""" File Description """
import os
def main():
""" Organize Car Data Into New File """
event_list = [] # This is the entire table
first_event = True # This is a flag
single_event = [-1, -1, -1] # This is a single row in the table
# [Event Name, Code Line Start, Code Line End]
with open('C:/car_event_data.dat', 'rb') as f:
line = '-1'
while line != '': # If line = '' then it is EOF
line = f.readline()
if line[0:6] == 'Event:':
if first_event == False:
single_event[2] = f.tell() - 1 # Code Line End
event_list.append(single_event) # Completed row
print(event_list)
end = line.find('\x03', 6) # Find the end location of Event Type
single_event[0] = line[6:end] # Event Type
single_event[1] = f.tell() # Code Line Start
first_event = False
f.seek(0, os.SEEK_END) # Put pointer at EOF
single_event[2] = f.tell()
event_list.append(single_event)
if __name__ == '__main__':
main()
上面的代码生成以下输出:
[['Accelerate', 99, 181]]
[['Break', 182, 263], ['Break', 182, 263]]
[['Horn', 264, 351], ['Horn', 264, 351], ['Horn', 264, 351]]
... and so on
答案 0 :(得分:1)
List对象在Python中通过引用传递。之前附加的元素变异到当前行的原因是因为它们都指向同一个列表single_event。
一个简单的
single_event = list(range(3))
每次追加操作后都应解决您的问题。