【发布时间】:2018-12-08 16:37:42
【问题描述】:
在 Powershell 中,您可以将文件直接下载到字符串中,而不是从 Web 请求中下载 CSV 文件来驱动吗?我经常从 USGS 数据库中提取地震数据,该数据库将数据输出为可下载的 CVS 文件。问题是每天都会提取数据,当提取数年的数据时,我最终会提取一千个或更多文件,然后将它们连接在一起。如果我可以直接下载到一个字符串中,我可以通过在内存中完成这一切来消除一千个或更多文件所需的读写文件时间。
用于拉取文件的基本代码部分是:
$U = $env:userprofile
$Location = "Region_Earthquakes"
$MaxLat = "72.427"
$MinLat = "50.244"
$MaxLon = "-140.625"
$MinLon = "-176.133"
$yearspulled = 1
$ts = New-TimeSpan -Days 1
$Today = Get-Date
$StartDate = [datetime](((Get-Date -format "yyyy") - $yearspulled + 1).ToString() + "-01-01 00:00:00")
While ($StartDate -le $Today)
{$EndDate = $Startdate + $ts
$Start = $StartDate.ToString("yyyy-MM-dd HH:mm:ss")
$FileDate = $StartDate.ToString("yyyy_MM_dd")
$End = $EndDate.ToString("yyyy-MM-dd HH:mm:ss")
$url = "http://earthquake.usgs.gov/fdsnws/event/1/query.csv?starttime=$Start&endtime=$End&minmagnitude=-1.00&maxmagnitude=10.00&maxlatitude=$MaxLat&minlatitude=$MinLat&maxlongitude=$MaxLon&minlongitude=$MinLon&eventtype=earthquake&orderby=time"
$output = "$U\DownLoads\$Location" + "_$FileDate.csv"
(New-Object System.Net.WebClient).DownloadFile($url, $output)
Write-Output "Date pulled for $Start"
$Startdate = $Startdate + $ts}
【问题讨论】:
标签: powershell-4.0