当前位置: 首页 > 知识库问答 >
问题:

使用PowerShell打开大型csv文件并导出特定列

巫马俊力
2023-03-14

我正在使用下面的命令获取前1000行数据:

Get-Content -First 1000 'C:\Users\Inspiron\Desktop\base.csv' | Out-File 'C:\Users\Inspiron\Desktop\sample.csv'

但是,我如何调整这个命令来获取数据范围。例如,提取行700到900之间的间隔。

还有一件事,我怎么能只导出几个变量。例如,我的数据库有120列,但我只想保存变量年份(第1列)、出生日期(第4列)和起源状态(第100列)。

共有1个答案

高明辉
2023-03-14

有几种方法可以解决这个问题。Building Mathews有用的答案:

$InCsv  = 'C:\Users\Inspiron\Desktop\base.csv'
$OutCsv = 'C:\Users\Inspiron\Desktop\sample.csv'
$Props  = "year","date of birth","state of origin"

$InCsv = Import-Csv $InCsv
$rangeselect = $InCsv[700..900] # You could use variables here too...

$rangeselect | 
Select-Object $Props |
Export-Csv -Path $OutCsv -NoTypeInformation

这需要选择您想要的属性并将它们重新导出到一个新的CSV文件。

注意:这不太可能,但是如果您正在处理非常大的文件,这种方法可能会有内存问题。它预先将整个文件读入内存,并将其存储在$csv变量中。如果系统是内存限制的,也可能发生这种情况,但这种情况很少见。

从技术上讲,您不需要赋值$rangeSelect变量,您可以直接在Import-Csv命令上使用范围运算符“..”,如下所示:

(Import-Csv $InCsv)[700..900] | 
Select-Object $Props |
Export-Csv -Path $OutCsv -NoTypeInformation

在这里,(..)在引用之前首先完成对所有CSV数据的读取,因此它的工作原理大致相同。

如果要在初始示例的基础上构建。其优点是只读取前1000行,很可能绕过任何内存限制:

$InCsv  = 'C:\Users\Inspiron\Desktop\base.csv'
$OutCsv = 'C:\Users\Inspiron\Desktop\sample.csv'
$Props  = "year","date of birth","state of origin"
$Skip   = 700
$First  = 200

Get-Content -First 1000 $InCsv | 
ConvertFrom-Csv |
Select-Object -Skip $Skip -First $First -Property $Props |
Export-Csv -Path $OutCsv -NoTypeInformation

这实际上是一个带有几个方便变量的单行程序。它利用了select-object中的参数。注意,它也只返回您要求的属性,因此将输出一个新的CSV文件,其中仅包含该数据。

您还可以组合这些方法,这也是因为select-object允许使用-skip-first-last参数来进行一些基本的初始筛选。这可能看起来像:

$InCsv  = 'C:\Users\Inspiron\Desktop\base.csv'
$OutCsv = 'C:\Users\Inspiron\Desktop\sample.csv'
$Props  = "year","date of birth","state of origin"
$Skip   = 699
$First  = 200

Import-CSv $InCsv |
Select-Object -Skip 700 -First 200 -Property $Props |
Export-Csv -Path $OutCsv -NoTypeInformation

在本例中,您可能必须使用边界。但是,它仍然是一个有效的单行程序,并且有可能得到您所要查找的内容。

 类似资料:
  • 本文向大家介绍Powershell使用OpenFileDialog打开文件示例,包括了Powershell使用OpenFileDialog打开文件示例的使用技巧和注意事项,需要的朋友参考一下 支持所有版本。 要添加某些文件到你的脚本中,下面一个例子使用一个文件对话框来获得一个文件: 现在你还可以控制这个窗体抬头和文件类型。

  • 我一直在读很多帖子,包括这篇 Javascript导出CSV编码utf-8问题 我知道很多人提到这是因为microsoft excel,使用这样的东西应该是可行的 https://superuser.com/questions/280603/how-to-set-character-encoding-when-opening-excel 我在ubuntu(它甚至没有任何问题)上试过,在window

  • 我是Java编程的新手,我的任务是解析CSV文件并通过比较列打印出CSV文件的正确行,例如打印的行需要有唯一的第1和第2列,第3列必须包含“no”,第4列的值大于或等于12。 共5列。 此外,我不允许使用任何为您解析CSV的库。 我不确定使用什么数据结构来比较列。 我非常感谢任何建议!

  • 我使用Dask读取2.5GB csv文件,Python给了我错误。这是我写的代码: 以下是我从Python得到的错误: dask_df=df1.read_csv('3SPACK_N150_7Ah_压力分布研究_Data_Matrix.csv')) 文件“C:\ProgramData\Anaconda3\lib\site packages\dask\dataframe\io\csv.py”,第645

  • 我正试图将数据从spark dataframe导出到。csv文件: 它正在创建一个文件名为“Part-R-00001-512872F2-9B51-46C5-B0EE-31D626063571.csv” 我希望文件名为“part-r-00000.csv”或“part-00000.csv”

  • 我正在尝试使用gallery打开特定文件夹,并参考了gallery中的其他类似问题open image form Build\u,并实现了以下代码,但仍然失败并报告错误(如以下logcat所示): 选择特定文件夹: 活动结果: 在Logcat中,它报告android。所容纳之物ActivityNotFoundException:找不到可处理意图的活动{act=android.Intent.acti