如何使用 powershell 脚本在 CSV 文件顶部添加新行?

2023-12-25

我是 powershell 脚本编写的新手,我正在寻找一种方法在现有 csv 文件的顶部添加 2 个新行。 我尝试过的事情是用新行替换标题和行。 我正在寻找一种在 CSV 标题上方添加 2 个新行的方法。


您提到您要添加新行above标头,这意味着不需要 CSV 特定的处理 -听起来你是在问如何前置行到现有的文本文件(恰好包含 CSV - 请注意生成的文件将不再是有效的 CSV 文件).

例如,假设目标文件名为some.csv:

Note: 最好做一个backup在尝试这些命令之前先查看目标文件。


如果输入文件足够小以适合整个内存:

将整个目标文件作为单个字符串读入内存Get-Content -Raw允许一个方便而简洁的解决方案:

Set-Content -LiteralPath some.csv -NoNewLine -Value (
  @'
New line 1 above header
New line 2 above header

'@ + (Get-Content -Raw some.csv)
)

注意Set-Content应用默认字符编码(活动 ANSI 代码页Windows PowerShell, PowerShell 中无 BOM 的 UTF-8Core),无论当前的编码如何some.csv,所以你可能必须使用-Encoding参数显式指定编码。

另请注意,这里的单引号字符串 (@'<newline>...<newline>'@)使用与封闭脚本相同的换行符样式(CRLF(Windows 样式)与 LF(Unix 样式)),这可能与中使用的样式不匹配some.csv- 尽管 PowerShell 本身处理具有混合换行符样式的文件没有问题。


如果文件太大而无法放入内存,请使用流式(逐行)方法:

$ErrorActionPreference = 'Stop'

# Create a temporary file and fill it with the 2 new lines.
$tempFile = [IO.Path]::GetTempFileName()
'New line 1 above header', 'New line 2 above header' | Set-Content $tempFile

# Then append the CSV file's lines one by one.
Get-Content some.csv | Add-Content $tempFile

# If that succeeded, replace the original file.
Move-Item -Force $tempFile some.csv

注意:使用Get-Content, Set-Content and Add-Contentcmdlet 是方便的, but slow;下一节展示了更快的替代方案。


如果性能很重要,请使用 .NET 类型,例如[IO.File]反而:

$ErrorActionPreference = 'Stop'

# Create a temporary file...
$tempFile = [IO.Path]::GetTempFileName()

# ... and fill it with the 2 new lines.
$streamWriter = [IO.File]::CreateText($tempFile)
foreach ($lineToPrepend in 'New line 1 above header', 'New line 2 above header') {
  $streamWriter.WriteLine($lineToPrepend)
}

# Then append the CSV file's lines one by one.
foreach ($csvLine in [IO.File]::ReadLines((Convert-Path some.csv))) {
  $streamWriter.WriteLine($csvLine)
}

$streamWriter.Dispose()

# If that succeeded, replace the original file.
Move-Item -Force $tempFile some.csv
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用 powershell 脚本在 CSV 文件顶部添加新行? 的相关文章

随机推荐

  • Spring 3 拦截器顺序

    我有一个 Spring 3 Web 应用程序 它实现了两个拦截器 我使用一个带有 Configuration注释的配置类 代码如下 Override public void addInterceptors InterceptorRegist
  • 如何从另一个对象访问我的应用程序委托的窗口访问器方法?

    如前所述 我是 Objective C 的初级新手 但在阅读了 4 本有关该主题的实体书以及大量电子书和文档后 我仍然找不到我想要的东西 我有一个顶级内容视图控制器 想要从应用程序委托的窗口属性的物理尺寸配置其视图属性 这是几个人已经提出的
  • 追踪流星/节点光纤中的堆栈溢出

    我现在看到了这个崩溃 并且对节点光纤基础设施不够熟悉 不知道从哪里开始解释错误或检测代码 Meteor server running on http localhost 3000 W202407 10 06 05 740 8 STDERR
  • go get:忽略 Git 设置

    我正在使用 Golang 和 GitLab CI 并且我有一个 GitLab CI 配置 它非常适合 12 个项目 但不适用于第 13 个项目 我遇到的问题是我正在尝试go get一些私人存储库 其中go get尝试通过已关闭的 HTTPS
  • 带 www 或不带 www 的默认 URL 有何优缺点?

    我们需要将默认 URL 设置为唯一名称 如果是 www 则没有前缀 反之亦然 因此要做出的决定是坚持使用 www 或不使用前缀 没有为所有子域设置前缀 cookie 它还有什么其他缺点 还是好处 基本上我们需要 OpenID 这个 因为如果
  • SQL Server:对于不存在的行,用 0 填充 MAX(列)值

    我想为表中不存在的行的 MAX TIER 返回 0 到目前为止 这是我的代码 SELECT LAST YARD BAY LAST YARD ROW MAX LAST YARD TIER as MAX TIER FROM Handlift W
  • 向 SQL Server 中的存储过程添加参数

    我是新来的K2and SQL Server 我想向存储过程添加一个参数 稍后将其绑定到K2相应视图和表单的智能对象 目前它接受 1 个参数 lang 这是来自标签的输入K2智能形式视图 我添加了一个标签labelHideInactiveCo
  • 首次折叠的 K 次折叠精度较低

    我创建了一个文本分类器 并且正在尝试利用 K 折交叉验证 我不明白为什么我的第一次折叠的准确度为 55 而我的其他折叠则在 99 100 的准确度下过度拟合 我的数据集是一个 5109x2 数据框 其中列 df Features 作为特征
  • CS0120:非静态字段、方法或属性“foo”需要对象引用

    考虑 namespace WindowsApplication1 public partial class Form1 Form public Form1 InitializeComponent private void button1 C
  • 如何使用 OpenCV 从图像中裁剪和提取图章?

    我是 OpenCV 新手 我有一个 简单 的邮票图像 我已经对其进行了一些处理 如下面的代码所示 现在我遇到了裁剪图像以获得印章的问题 边缘上的点和条纹会干扰我当前识别邮票的代码 图像可能不同 因此无法修复图像的位置 Code img cv
  • 循环算法Java实现

    我认为我的问题相当简单 但我觉得我需要一些不同的视角 因为我似乎无法将这个算法转化为代码 我需要制定一个运动队赛程表 其中 n 支球队 在本例中为 10 支球队 以循环赛形式进行比赛 规则遵循基本的循环赛格式 其中一支球队在给定时间只能与另
  • 基于 Woocommerce 中的自定义单选按钮的动态运费

    在 Woocommerce 中 我在结帐页面上添加了两个自定义单选按钮 单击后 我调用 ajax 函数来添加送货费 这是我的代码 document on change shipping method 0 local pickup5 func
  • 如何在 TBody 中将 TH 标头与 TD 对齐

    我在尝试使用一些 CSS 将表格嵌入现有 HTML 页面时遇到问题 默认情况下 此 CSS 隐藏表格的标题 其样式定义如下 tablestuff thead display none 但我希望显示表格 所以我尝试使用 display blo
  • Visual Studio 2017 安装中断:无法启动

    我使用管理员权限安装vs enterprise exe 但安装包根本不起作用 操作系统 win10专业版 appdata local temp 中的安装日志如下 dd bootstrapper 20170313103210 日志的开头 开始
  • Woocommerce:仅显示同一子类别的相关产品

    相关产品是从您的商店中提取与当前产品具有相同标签或类别的其他产品的部分 src Woocommerce 文档 http docs woothemes com document related products up sells and cr
  • Cordova 应用程序中的 HTTP 加载失败(kCFStreamErrorDomainSSL,-9813)

    我使用 Cordova 3 2 和 jquery mobile 1 3 创建了一个 iOS 应用程序 我使用 jquery ajax 向 RESTfull 服务发送请求以检索 更新信息 我有很多测试设备 各种 iPhone 具有各种不同的
  • Xcode 11 中如果没有更多上下文,表达式类型不明确

    我想参考一个 Item 列出一个内 EnvironmentObject但是当在一个范围内访问它时SwiftUI List 我收到错误 我不明白的是 执行以下操作时不会弹出此错误Apple 的 Landmark 教程 https develo
  • MPRemoteCommandCenter 对 MPMusicPlayerController 不执行任何操作

    我一直在编写使用的代码 MPMusicPlayerController applicationMusicPlayer 演奏音乐 此操作已成功运行 并将在控制中心屏幕上显示当前播放曲目的详细信息 不幸的是 我似乎无法从控制中心屏幕或耳机中使用
  • Rails、jQuery、.js.erb 文件、JS 不被浏览器执行

    我正在尝试使用 jQuery 一切都很棒 直到现在 当我尝试渲染部分并将其附加到 div 时 这是我的设置方法 我有一个响应 js 的操作 def index objects Object find all respond to do fo
  • 如何使用 powershell 脚本在 CSV 文件顶部添加新行?

    我是 powershell 脚本编写的新手 我正在寻找一种方法在现有 csv 文件的顶部添加 2 个新行 我尝试过的事情是用新行替换标题和行 我正在寻找一种在 CSV 标题上方添加 2 个新行的方法 您提到您要添加新行above标头 这意味