我需要做的是获取一些文本文件(csv,所有在一个目录中)并创建文件,其中整个输出逐行反转,但保持标题在顶部而不是最终在底部。
我可以获取一个文件(按名称)并复制第一行并创建一个只包含该行的新文件。然后我取原始文件减去第一行,将其读入数组并反转。然后我将它附加到只有标题的文件。它的工作正常,除了输出名称,我想成为[file-REV.csv]
但到目前为止我只得[file.csv-REV]
...
所以,一旦我有了这个工作,我认为是时候让程序找到目录中的所有csv
并循环遍历它们,为每个创建一个反向文件。
这是我到目前为止所做的:
cd c:\users\$([Environment]::UserName)\working
$Path = "c:\users\$([Environment]::UserName)\working\"
ForEach ($file in Get-ChildItem -Filter *.csv) {
Get-Content $file -totalcount 1 | Set-Content .\$file-REV.csv
$flip = (get-content | select -Skip 1)
[array]::Reverse($flip)
$flip | add-content "$file-REV.csv"
}
以下是执行脚本时收到的消息:
命令管道位置1的cmdlet Get-Content
提供以下参数的值:
路径[0]:
我试图放入整个路径Get-Content -Path c:\users\jmurphy\working\
,然后抱怨它无法找到整条路径。
答案 0 :(得分:1)
夫妻俩。首先,您要定义要在变量中使用的文件夹,因此请在make -p -f/dev/null
# or, if you like typing, make --print-data-base -f /dev/null
中使用该文件夹。 (我将名称改为import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
x = np.random.random(10)
y = np.random.random(10)
z = np.random.random(10)
value = np.random.randint(2,size=10)
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
ax.scatter(x[value==0], y[value==0], z[value==0])
plt.show()
,因为Get-ChildItem
已经在环境范围内使用了变量。另外$Folder
是从环境范围中读取变量的更快捷的方法。)
$Path
其次,您只想使用$env:
返回的$Folder = "C:\Users\$env:UserName\working\"
$Files = Get-ChildItem $Folder -Filter *.csv
属性,因为这是每个文件的完整路径。
Fullname
因此,您希望在Get-ChildItem
ForEach ($File in $Files) {
并且当您再次致电Get-Content
时,您想再次使用Get-Content $File.Fullname -totalcount 1 | Set-Content .\$($file.Basename)-REV.csv
作为文件的路径:
$File
Get-Content
是来自$Flip = (Get-Content $File.Fullname | Select -Skip 1)
的属性,只有没有扩展名的文件名。您可以通过括在Basename
中来强制在双引号内对变量的属性进行求值。
Get-Childitem
所有脚本应该如下所示:
$()
答案 1 :(得分:0)
Joe,你在学习PowerShell方面做得很好。你只需要更多地利用面向对象的力量。
您已经知道Get-ChildItem将返回有关文件的对象。您需要知道的是该对象中包含的成员。使用Get-Member找到它。
$file = Get-ChildItem .\t.csv
$file | Get-Member
找到有趣的成员后,请查看它的价值。
$file.Name
$file.Extension
$file.BaseName
由此,您可以构建一个新文件名。
$newFilename = $file.Basename + '-REV' + $file.Extension
将此内容放在Get-Content行之前。然后将$ newFilename与Add-Content一起使用。