【问题标题】:Python reading from CSV file in python 2.7 but not python 3.6. What do i have to do to make it work in 3.6Python 从 python 2.7 中的 CSV 文件读取,但不是 python 3.6。我必须做些什么才能使其在 3.6 中工作
【发布时间】:2017-08-13 19:55:44
【问题描述】:

我有一些我在 python 2.7 中编写的代码,但是我需要它在 3.6 中工作,当我运行它时,我得到了这个错误,我不知道为什么。

import csv
def ReadFromFile():
  with open('File.csv', 'r') as File:
    cr = csv.reader(File)
    for row in cr:
      Name = row[0]
      Gender = row[1]
      print(Name + Gender)

Traceback (most recent call last):
  File "<pyshell#0>", line 1, in <module>
    ReadFromFile()
  File "F:/Test.py", line 6, in ReadFromFile
    Name = row[0]
IndexError: list index out of range

我正在使用与 2.7 中的文件保存在记忆棒上的相同代码,我得到了我想要的结果,但在 3.6 中我遇到了错误。感谢您的帮助

编辑:添加打印 添加打印后我得到了

ELIZABETHFemale
Traceback (most recent call last):
  File "<pyshell#1>", line 1, in <module>
    ReadFromFile()
  File "F:/Test.py", line 6, in ReadFromFile
    Name = row[0]
IndexError: list index out of range

所以它给了我第一行,但仅此而已

【问题讨论】:

  • 给我们展示一个重现的例子。
  • 如果你打印出 row 会得到什么?
  • 添加了编辑以显示如果我添加打印会得到什么
  • 你没有抓住重点。不要打印出NameGender。只需打印row。没有下标。整排本身。你应该看到问题了,这与你使用的是 Python 2.7 还是 3.6 无关。
  • 还要考虑列表索引超出范围意味着什么。如果您有一个名为mylist 的列表并且它有3 个元素,那么这些元素可以被mylist[0]mylist[1]mylist[2] 引用。如果您尝试mylist[3],则会收到列表索引超出范围错误。那么row 告诉你什么?如果row[0] 生成的列表索引超出范围,row 有多少个元素?

标签: python python-2.7 python-3.x csv


【解决方案1】:

你试过熊猫吗? 我想你可能想使用类似的东西

import pandas as pd

def ReadFromFile():
    df = pd.read_csv('File.csv')
    for row in df:
      Name = row[0]
      Gender = row[1]
      print(Name + Gender)

【讨论】:

  • 请记住,您可以将代码封装在 ``` 中以正确格式化
【解决方案2】:

Python 的 CSV 模块已经改变了它希望您传递给它的文件的打开方式。您希望避免文件对象执行任何换行符转换,因为某些 CSV 格式允许在引用字段中嵌入换行符。 csv 模块将执行自己的换行规范化,因此处理文件对象的常用通用换行符是多余的。

这是在the csv.reader documentation 中提到的,它正在谈论文件参数:

如果 csvfile 是一个文件对象,它应该用newline='' 打开。

因此,对于您的代码,请尝试将 open('File.csv', 'r') 更改为 open('File.csv', 'r', newline='')

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-11-11
    • 2017-08-13
    • 2020-05-14
    • 2018-01-12
    • 2019-04-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多