【问题标题】:Python CSV File Read and SavePython CSV 文件读取和保存
【发布时间】:2018-11-29 17:39:01
【问题描述】:

我在将最新的座位更新保存到我的 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] Permission denied: 'coba.csv'

提前致谢

【问题讨论】:

  • 我可以知道为什么是熊猫吗?
  • 我不太确定你想让这个程序做什么。它失败了,因为您无法在 CSV 阅读器上调用 len()。您要附加到 CSV 文件的内容是什么,您要为附加建立什么条件?
  • 您的问题是什么?你想提取什么数据?标题行 [Business] 是什么,A1-A5 和 B1-B5 是干什么用的?您需要什么数据?
  • @Chirag 读取 3 行文本 - 使用像 pandas 这样成熟的 框架 简直是矫枉过正。并非所有数据都必须像钉子一样处理,即使您挥动熊猫锤也是如此。
  • 更新您的问题,而不是在 cmets 中发布。

标签: python python-3.x list csv


【解决方案1】:

我认为你有错别字。您应该检查 len(line) 而不是 len(seating) 并使用列表而不是元组与您的 seat

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()

【讨论】:

  • @PatrickArtner 顺便说一句,完整的 csv 文件有商务舱和经济舱的标题,所以我认为每行只包含 5 个项目
  • 感谢老兄的回复!我试试,顺便说一句,座位已经列出来了,有点错别字嘿嘿!!
  • @CtrlS umm 我编辑了帖子,抱歉我是这个平台的新手
  • @DeltaTroz 你编辑了什么帖子?您还没有在您的问题下发布任何新的 cmets。此外,您应该编辑您的问题以包含您在 cmets 中提到的新细节。
  • @DeltaTroz 我以为你会回复 PatrickArtner。哦,好吧。
【解决方案2】:

这给出了 A 列的前 5 行:

from pandas import read_csv

data = read_csv('name.csv')

result = []

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

【讨论】:

  • 不起作用。您的 df 与您认为的不同,首先在 3 行上使用 pandas 是多余的,而且您缺少 : 来使此代码完全工作
  • 是的,我忘了。我想我问错了。这个问题在编辑之前很复杂。@PatrickArtner
【解决方案3】:

用每一行的列表填充您的座位列表

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】:

    这只是您的代码的修复。您可以在 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']]
    """
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-03-25
      • 1970-01-01
      • 1970-01-01
      • 2019-05-07
      • 1970-01-01
      • 2017-09-08
      相关资源
      最近更新 更多