此问题在此处已有答案:
Why can't I call read() twice on an open file?(7个答案)
Python : The second for loop is not running(1个答案)
Why can't I repeat the 'for' loop for csv.Reader?(2个答案)
For loop not working twice on the same file descriptor [duplicate](3个答案)
Iterating on a file doesn't work the second time [duplicate](4个答案)
四年前就关门了。
我想打开并读取文件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/windows设置来允许Python读取文件?
谢谢你的帮助!
4条答案
按热度按时间carvr3hs1#
你需要提供给
csv.reader
文件对象,而不是file.readlines()
。如果你想打印B,你需要寻找到文件的开头,类似于C。印刷品:
fykwrbwg2#
reader将文件对象作为第一个参数,而不是file.readlines()返回的列表。
所以你的台词:
应为:
要打印的for循环('B ')应为:
您的for循环to print('C ')应该可以正常工作,尽管值得注意的是您可以直接设置csv_file_list = list(csv_file)。并且您应该使用以下命令将文件重置为第一行:
j1dl9f463#
在您的代码中,您只打印了
A
、B
或C
。请尝试打印整行。您将看到cvs_file
中的row
是一个对象,我们只访问了它的一部分。在the docs中,请参见以下示例:在此示例中,尝试:
得双曲余切值.
最后,您需要更改读取文件的方式。您的
cvs_files
正在使用;
的delimiter
。请尝试使用delimiter
而不是dialect
。并且您的file
实际上没有任何属性row
。您需要slhcrj9b4#
这是一个替代的解决方案。我使用the Pandas tool来阅读CSV文件。代码实际上非常简单,并将答案输出到Pandas
DataFrame
数据结构中。对我来说,tt比csv工具更容易读取提取的信息,也更容易处理。以下是代码片段: