Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 3.x Python3.7从csv中的特定点开始读取_Python 3.x_Csv - Fatal编程技术网

Python 3.x Python3.7从csv中的特定点开始读取

Python 3.x Python3.7从csv中的特定点开始读取,python-3.x,csv,Python 3.x,Csv,嘿,我真的需要帮助。我已经尝试了1个小时来寻找python的解决方案,但没有找到 我正在使用Python 3.7 我的输入是客户提供的文件-我无法更改它。其结构如下所示: 它以非CSV格式的随机文本开始,从文件其余部分的第3行开始为CSV格式 text line text line text line or nothing Enter [csv文件开始]“列名称1”,“列名称2”。。直到6点 “价值1”、“价值2”。。。直到6号-持续多行 我想提取前3行以创建纯CSV文件,但找不到只针对

嘿,我真的需要帮助。我已经尝试了1个小时来寻找python的解决方案,但没有找到

我正在使用Python 3.7 我的输入是客户提供的文件-我无法更改它。其结构如下所示: 它以非CSV格式的随机文本开始,从文件其余部分的第3行开始为CSV格式

text line

text line

text line or nothing

Enter
[csv文件开始]“列名称1”,“列名称2”。。直到6点

“价值1”、“价值2”。。。直到6号-持续多行

我想提取前3行以创建纯CSV文件,但找不到只针对特定行范围执行此操作的代码。这似乎也是错误的解决方案,因为我认为从某一点开始阅读应该是可能的。 然后我认为split()是解决方案,但它不适用于这种格式。这些值有时是数字、日期或字符串。不能使用seek()方法,因为它们的启动方式不同。 现在,我的听写器将第一行作为索引,因此其余部分呈现为混乱状态

import csv

import pandas as pd

from prettytable import PrettyTable

with open(r'C:\Users\Hans\Downloads\file.csv') as csvfile:

    csv_reader = csv.DictReader (r'C:\Users\Hans\Downloads\file.csv', delimiter=',')

    for lines in csvfile:

        print (lines)
如果已经找到python的一些答案,请链接它,我无法找到它。
非常感谢你的帮助。非常感谢。

如果您知道要跳过的行数,那么只需打开文件并读取那么多行,然后将文件句柄传递给Dictreader,它就会读取其余的行

导入csv
跳过行=3
打开('test.dat')作为我的\u文件:
对于范围内的(跳过行):
打印(“跳过行:”,my_file.readline(),end=“”)
打印(“CSV数据”)
csv\u reader=csv.DictReader(我的文件)
对于csv_读取器中的行:
打印(行)
文件

this is junk
this is more junk
last junk
name,num,symbol
chris,4,$
adam,7,&
david,5,%
输出

skiping line: this is junk
skiping line: this is more junk
skiping line: last junk
###CSV DATA###
OrderedDict([('name', 'chris'), ('num', '4'), ('symbol', '$')])
OrderedDict([('name', 'adam'), ('num', '7'), ('symbol', '&')])
OrderedDict([('name', 'david'), ('num', '5'), ('symbol', '%')])

我将坚持使用pandas选项,因为文档中明确说明skiprows参数允许跳过n行。我用@Chris Doyle提供的示例进行了尝试(将其保存到名为line_file.csv的文件中),效果如预期

import pandas as pd
f = pd.read_csv('line_file.csv', skiprows=3)
输出


为什么不使用open正常打开文件,然后调用readlines 3次,然后将文件句柄传递给dictreader以吃掉文件的其余部分?也许您可以尝试使用pandas。您可以检查pd.read\u csv,并将跳过行设置为3。它将开始从中读取您的文件there@IvanCalderon谢谢你的评论,但是它跳过了行而不是行。据我在文档中看到的,Pandas没有理由忽略行。你能澄清行和行之间的区别吗?行是一种垂直对齐方式,就像excel中的A B C一样,从上到下排列。一条线是一个水平的对齐方式,如excel 1 2 3中所示,所以如果您愿意,可以从左向右排列。使用skiprow时,它将看到第一行只有一个项目,然后调整文件的其余部分。也许我监督了一些事情,但当我尝试它时,它并没有解决我的问题。谢谢你的评论。我会在周四或周六尝试,然后再回到你的评论。抱歉耽搁了。在我的初学者看来,熊猫解决方案更干净。因此,我决定坚持下去。感谢您的评论和时间:)我同意您@Ivan的观点,因为OP gas是import pandas声明的一部分,如果他们计划将csv的其余部分作为pandas数据帧加载,那么这个答案就更干净了。好的,很抱歉回复太晚。我尝试了这个代码,确实奏效了。现在我有了不同的问题,但这些问题已经被讨论过了——虽然在@Hans中没有解决,但我很高兴它起了作用。请您考虑对该问题进行投票。“感谢您的反馈!记录了声誉低于15的人的投票,但不要更改公开显示的帖子分数”
  name  num symbol
0 chris   4      $
1 adam    7      &
2 david   5      %