【问题标题】:Trying to read the first line of CSV file returns ['/']尝试读取 CSV 文件的第一行返回 ['/']
【发布时间】:2016-06-06 17:44:44
【问题描述】:

我已经通过 Django 上传了一个 CSV 文件,我试图读取它的第一行。该文件存储在服务器上的

/tmp/csv_file/test.csv

文件如下所示:

column_1,column_2,column_3
2175,294,Nuristan
2179,299,Sar-e-Pul

我正在尝试获取文件的标题,例如:

absolute_base_file = '/tmp/csv_file/test.csv'
csv_reader = csv.reader(absolute_base_file)
csv_headings = next(csv_reader)
print csv_headings

我只得到这个作为回报:

['/']

已编辑

CSV文件的权限为:

-rw-rw-r--

应该没问题。

再次编辑

基于@EdChum 和@Moses Koledoye 的建议和帮助

我检查了文件是否被正确读取:

print (os.stat(absolute_base_file).st_size) # returns 64

然后我尝试查看 seek(0) 和 csvfile.read(1) 是否返回单个可打印字符。

   print csvfile.seek(0) returns None
   print csvfile.read(1) returns 'c'

然后我认为 next() 函数可能存在特定问题,我尝试了替代方法:

csv_reader = csv.reader(csvfile) 
for row in csv_reader:   
   print ("csv_reader") 

这又没用。

【问题讨论】:

  • 你能发个csv文件的链接让我下载试试
  • 这对我来说很好:['id', ' name', ' date'] first row: ['0', ' name', ' 2009-01-01']我不知道这里还有什么建议

标签: python csv


【解决方案1】:

你传递了一个字符串而不是一个文件对象,这就是你得到斜线的原因,改成这样:

with open (absolute_base_file) as csvfile:
    csv_reader = csv.reader(csvfile)

查看docs

看看这个工作:

In [5]:
import csv
with open (r'c:\data\csv_test.csv') as csvfile:
    csv_reader = csv.reader(csvfile)
    csv_headings = next(csv_reader)
    print (csv_headings)

['column_1', 'column_2', 'column_3']

连续访问每一行调用next

In [7]:
import csv
with open (r'c:\data\csv_test.csv') as csvfile:
    csv_reader = csv.reader(csvfile)
    csv_headings = next(csv_reader)
    print (csv_headings)
    first_row = next(csv_reader)
    print( 'first row: ', first_row)


['column_1', 'column_2', 'column_3']
first row:  ['2175', '294', 'Nuristan']

【讨论】:

  • 谢谢。那讲得通。但是我怎样才能访问 CSV 的第一行呢?
  • 再次调用 next 获取任意行参见相关:stackoverflow.com/questions/30964244/…
  • 嗯。我仍然无法让它工作。一切正常,直到: csv_reader = csv.reader(csvfile) 但是当我尝试访问 csv_reader 时: next(csv_reader) 我什么也没得到。
  • 检查文件是否被正确读取:stackoverflow.com/questions/2507808/…
  • 打印 (os.stat(absolute_base_file).st_size) 返回 64
【解决方案2】:

您应该将文件对象传递给您的 csv.reader 而不是字符串文字。

absolute_base_file = open(r'/tmp/csv_file/test.csv') # notice open
csv_reader = csv.reader(absolute_base_file)
csv_headings = next(csv_reader)
print csv_headings

【讨论】:

  • 它的第一部分有效,但是在尝试获取标题 (csv_headings) 时出现错误。
  • 我认为它一定不能识别 next() 函数。我使用python 2.7。问题是整个代码都在尝试中......除了它只是不执行它。
  • 路径有问题?
  • 我认为没有。这是我打印 (csv_reader) 时得到的结果:<_csv.reader object at> 我认为这意味着它可以访问。
  • 尝试csv_reader.next(),如docs 所示。不知道这是否会改变任何东西。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-12-29
  • 2015-04-07
  • 1970-01-01
  • 2023-04-02
相关资源
最近更新 更多