R read.csv error: Operation not permittedError in file(file, "rt")

问题描述 投票:0回答:1

我在 R 中有一个我绝对无法解决的 read.csv() 错误。

我做了什么:我从 https://www.finra.org/finra-data/browse-catalog/equity-short-interest/data 下载了一个 .zip 文件(我将日期设置为 2019-01-01 到2019-12-31 和 Market = NYSE 的过滤器;之后我单击“导出”)。我在我的 Macbook 上打开了 .zip 文件,现在我的下载文件夹中有 .csv 文件。我将文件重命名为“equityshortinterest_2019.csv”。

现在我做到了

Short_Interest <- read.csv("~/Downloads/equityshortinterest_2019.csv")

得到这个错误

Warning: cannot open file '/Users/macbook/Downloads/equityshortinterest_2019.csv': Operation not permittedError in file(file, "rt") : cannot open the connection

我的下载文件夹中的其他.csv文件可以这样打开!我检查了文件的权限,我有读写权限。我也尝试了其他方法来打开 csv,但都给了我同样的错误。

有人知道如何解决这个问题吗?提前致谢!

r csv read.csv
1个回答
1
投票

您看到的问题不太可能与 R 相关(例如,您是否在其他程序中打开了文件?),但对于更强大的工作流程,您可能希望将外部数据集保留在 RStudio 项目文件夹中。如果你不使用项目,你可能应该,你会得到可靠的相对路径。

和/或尽可能自动化,即不要手动提取 zip 存档并重命名生成的文件,而是使用类似这样的东西:

# In Windows, "~" refers to "username/Documents" by default
archive <- "~/../Downloads/equityshortinterest.zip" 
file.exists(archive)
#> [1] TRUE

# unzip(..., list = TRUE) returns dataframe with zip content, 
# [1,1] is Name of the first file
df_ <- unz(archive, unzip(archive, list = TRUE)[1,1]) |> read.csv()

或者只对存档本身使用

readr::read_csv()
;假设 zip 中有一个 CSV,它将为您处理提取:

readr::read_csv(archive)
#> Rows: 73942 Columns: 11
#> ── Column specification ────────────────────────────────────────────────────────
#> Delimiter: ","
#> chr  (4): Issue Name, Symbol, Market, Revision Flag
#> dbl  (6): Current Short, Previous Short, Chg, % Change from Previous, Avg Da...
#> date (1): Settlement Date
#> 
#> ℹ Use `spec()` to retrieve the full column specification for this data.
#> ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
#> # A tibble: 73,942 × 11
#>    `Settlement Date` `Issue Name` Symbol Market `Current Short` `Previous Short`
#>    <date>            <chr>        <chr>  <chr>            <dbl>            <dbl>
#>  1 2019-12-31        3D Systems … DDD    NYSE          23804548         23954237
#>  2 2019-12-31        3M Company   MMM    NYSE           9949341          9957296
#>  3 2019-12-31        500.com Lim… WBAI   NYSE           2509504          2563847
# ...
#> # ℹ 73,932 more rows
#> # ℹ 5 more variables: Chg <dbl>, `% Change from Previous` <dbl>,
#> #   `Avg Daily Vol` <dbl>, `Days to Cover` <dbl>, `Revision Flag` <chr>

对于下载自动化

httr
/
httr2
就足够了:

library(httr2)

# extract cURL request from browser's dev tools and pass it to 
# httr2::curl_translate() for quick and dirty httr2 prototype

dest <- tempfile(fileext = ".zip")
request("https://services-dynarep.ddwa.finra.org/public/reporting/v2/data/export/group/OTCMarket/name/ConsolidatedShortInterest") %>% 
  req_headers(`content-type` = "application/json") %>% 
  req_body_raw('{"aggregationFilter":null,"arrayFields":[],"compareFilters":[{"fieldName":"marketClassCode","fieldValue":"NYSE","compareType":"EQUAL"}],"dateRangeFilters":[{"fieldName":"settlementDate","startDate":"2019-01-01","endDate":"2019-01-15"}],"delimiter":null,"domainFilters":[],"fileName":"equityshortinterest.csv","fileType":"CSV","groupFields":[],"limit":5000,"mainFields":[{"id":"settlementDate","displayName":"Settlement Date","include":true,"primary":false},{"id":"issueName","displayName":"Issue Name","include":true,"primary":false},{"id":"symbolCode","displayName":"Symbol","include":true,"primary":false},{"id":"marketClassCode","displayName":"Market","include":true,"primary":false},{"id":"currentShortPositionQuantity","displayName":"Current Short","include":true,"primary":false},{"id":"previousShortPositionQuantity","displayName":"Previous Short","include":true,"primary":false},{"id":"changePreviousNumber","displayName":"Chg","include":true,"primary":false},{"id":"changePercent","displayName":"% Change from Previous","include":true,"primary":false},{"id":"averageDailyVolumeQuantity","displayName":"Avg Daily Vol","include":true,"primary":false},{"id":"daysToCoverQuantity","displayName":"Days to Cover","include":true,"primary":false},{"id":"revisionFlag","displayName":"Revision Flag","include":true,"primary":false}],"offset":0,"orFilters":[],"quoteValues":false,"sortFields":["-settlementDate","+issueName"],"singleFile":false,"zipped":true}') %>%
  req_perform(path = dest)
readr::read_csv(dest)

创建于 2023-05-07 与 reprex v2.0.2

© www.soinside.com 2019 - 2024. All rights reserved.