读取和保存Python CSV文件

时间:2018-11-29 17:39:02

标签: python python-3.x list csv

我在将最新的座位更新保存到我的CSV文件时遇到问题。 我希望用户预订的每个席位都能收到CSV文件文件中的更改。 示例:如果用户预订A1座位,则A1为CSV文件将替换为X。

我的程序目标是读取csv文件并将其存储,然后在以后进行替换。每排有5个座位。 A1-A5是商务舱的第一行,B1-B5是第二行商务舱。我希望程序用“ X”代替已占用/预订的座位。 示例:A1 | X | A3 | A4 | A5(A2不可用,已被占用)

这是我的代码:

seat =[]
csvfile = open('coba.csv') 
seating = csv.reader(csvfile)
for line in seating:
    seat.append(line)

print("Buy seat ?")
answer_1 = input("Answer : ")
if (answer_1 == "yes"):
    answer_2 = input("Enter preferred seat: ")
    if (answer_2 == "A1"):
        row = 1
        column = 0
        seat[row][column] = "X"
        for line in seat:
            print(' | '.join(line))
        writer = csv.writer(open('coba.csv', 'w'))
        writer.writerows(line)

我的CSV文件:

[Business]
A1,A2,A3,A4,A5
B1,B2,B3,B4,B5
[Economy]
C1,C2,C3,C4,C5
D1,D2,D3,D4,D5
E1,E2,E3,E4,E5

错误:

  

PermissionError:[Errno 13]权限被拒绝:'coba.csv'

预先感谢

5 个答案:

答案 0 :(得分:1)

我认为您有错别字。您应该检查len(line)而不是len(seating),并且还应该使用seat

使用list而不是tuple
import csv

def load():
    seat = []
    csvfile = open('x.csv')
    seating = csv.reader(csvfile)
    for line in seating:
        if len(line) == 5:
            seat.append(line)
    print(seat)

load()

答案 1 :(得分:0)

这给出了A列的前5行:

from pandas import read_csv

data = read_csv('name.csv')

result = []

for i in range(5):
    result.append(data['A1'][i])

答案 2 :(得分:0)

第一行在csv中作为行无效的问题

(使用熊猫)可以做到这一点:

import pandas as pd

df = pd.read_csv('coba.csv', header=None, skiprows=[0], sep=',')

print(df)

或者您可以跳过阅读代码的第一行。

答案 3 :(得分:0)

用每行列表填充座位列表

seats = []
with open('file.csv', 'rb') as csvfile:
    csvreader = csv.reader(csvfile, delimiter=',')
    for row in csvreader:
        line = tuple(row)
        if len(line) == 5:
            seat.append(list(line))

遍历列表中的每一行,并将其更改为所需的内容。

答案 4 :(得分:-1)

这只是代码的修复。您可以在object of type '_csv.reader' has no len(), csv data not recognized上找到问题解决的50%。

  

对于您要寻找的东西有更好的解决方案。

如何解决?

  • seat初始化为[],因为我们知道元组()是不可变的。

  • seating是一个迭代器,因此,如果要计算长度,请将其转换为列表。

  

coba.py

import csv 

def load():
    seat = []
    csvfile = open('coba.csv') 
    seating = csv.reader(csvfile)
    print(type(seating))

    seating = list(seating)
    print(type(seating))

    for line in seating:
        print(seating)
        if len(line[0].split(',')) == 5:
            #print(' | '.join(row))
            seat.append(line)

    print(seat)

load()

"""
<class '_csv.reader'>
<class 'list'>
[['[BUSINESS]'], ['A1,A2,A3,A4,A5'], ['B1,B2,B3,B4,B5']]
[['[BUSINESS]'], ['A1,A2,A3,A4,A5'], ['B1,B2,B3,B4,B5']]
[['[BUSINESS]'], ['A1,A2,A3,A4,A5'], ['B1,B2,B3,B4,B5']]
[['A1,A2,A3,A4,A5'], ['B1,B2,B3,B4,B5']]
"""