在python中读取csv文件

时间:2018-07-24 22:13:54

标签: python windows file csv

我想打开并读取文件Mappe1.csv,但是它不起作用。我正在使用Python 3.6.5 Anaconda。我不知道我在做什么错。有什么想法吗?

文件Mappe1.csv包含:

A;B;C
1;4;7
2;5;8
3;6;9

用于打开Mappe1.csv的python代码如下所示:

import csv


class CSVAdapter:
    def read_csv(self):
        with open("C:/Users/User/PycharmProjects/General/DesignUploader/Mappe1.csv") as file:
            dialect = csv.Sniffer().sniff(file.read(1024))
            csv_file = csv.reader(file.readlines(), dialect, quotechar='"')
            print("A")
            csv_file_list = []
            for row in file:
                print("B")
            for row in csv_file:
                print("C")
                csv_file_list.append(row)
        return csv_file_list

打印输出仅为“ A”。没有打印出“ B”和“ C”,这导致我得出以下结论:文件未正确读取。

是否需要任何允许Python读取文件的python / windows设置?

谢谢您的帮助!

4 个答案:

答案 0 :(得分:2)

您需要提供csv.reader文件对象,而不是file.readlines()。如果要打印B,则需要查找到文件的开头,类似于C。

import csv

def read_csv():
    with open("data.csv") as file:
        dialect = csv.Sniffer().sniff(file.read(1024))
        csv_file = csv.reader(file, dialect, quotechar='"')

        print("A")
        csv_file_list = []

        file.seek(0)

        for row in file:
            print("B")

        file.seek(0)

        for row in csv_file:
            print("C")
            csv_file_list.append(row)
    return csv_file_list

print(read_csv())

打印:

A
B
B
B
B
C
C
C
C
[['A', 'B', 'C'], ['1', '4', '7'], ['2', '5', '8'], ['3', '6', '9']]

答案 1 :(得分:0)

csv.reader将文件对象作为第一个参数,而不是file.readlines()返回的列表。

所以您的电话:

csv_file = csv.reader(file.readlines(), dialect, quotechar='"')

应为:

csv_file = csv.reader(file, dialect, quotechar='"')

您要打印的循环('B')应该是:

for row in file.readlines():
    print('B')

您的for循环到print('C')应该可以正常工作,尽管值得注意的是,您可以直接设置csv_file_list = list(csv_file)。您应该使用以下命令将文件重置为第一行:

file.seek(0)

答案 2 :(得分:-1)

在您的代码中,您仅打印import { library } from '@fortawesome/fontawesome-svg-core'; import { oldName } from '@fortawesome/free-solid-svg-icons'; const faFortAwesome = oldName; library.add(faFortAwesome); AB。尝试打印整行。您会看到C中的row是一个对象,我们只访问其中的一部分。在the docs中,查看示例:

cvs_file

在此示例中,尝试:

 >>> import csv
 >>> with open('eggs.csv', newline='') as csvfile:
 ...     spamreader = csv.reader(csvfile, delimiter=' ', quotechar='|')
 ...     for row in spamreader:
 ...         print(', '.join(row))
 Spam, Spam, Spam, Spam, Spam, Baked Beans
 Spam, Lovely Spam, Wonderful Spam

相反。

最后,您将想要更改文件的读取方式。您的 for row in csv_file: print(','.join(row)) 正在使用cvs_files中的delimiter。尝试代替;。而且您的dialect实际上没有任何属性file。您将需要

row

答案 3 :(得分:-1)

在处理数据时,我使用pandas来读取csv。代码非常简单,并将答案输出到熊猫DataFrame中。

import pandas

df = pandas.read_csv('C:/Users/User/PycharmProjects/General/DesignUploader/Mappe1.csv')

df