2015-06-01 30 views
10

Jak mogę sprawdzić rozmiar pliku przed załadowaniem go do R?Jak sprawdzić rozmiar pliku przed otwarciem w R

Na przykład:

http://math.ucdenver.edu/RTutorial/titanic.txt

Chciałbym skorzystać z optymalnej polecenie otwarcia pliku na podstawie wielkości pliku.

+2

'file.info' jest chyba to, co chcesz. – cory

+0

https://stackoverflow.com/questions/20921593/how-to-determine-the-file-size-of-a-remote-download-without-reading-the-entire-f prawdopodobnie jest to, co chcesz –

Odpowiedz

5
library(RCurl) 
url = "http://math.ucdenver.edu/RTutorial/titanic.txt" 
xx = getURL(url, nobody=1L, header=1L) 
strsplit(xx, "\r\n") 
+0

bardzo fajne dzięki – Rhodo

13

Zastosowanie file.info()

file.info("data/ullyses.txt") 

        size isdir mode    mtime    ctime    atime uid gid 
data/ullyses.txt 1573151 FALSE 664 2015-06-01 15:25:55 2015-06-01 15:25:55 2015-06-01 15:25:55 1008 1008 

Potem wyodrębnić kolumna nazywa size:

file.info("data/ullyses.txt")$size 
[1] 1573151 
+0

i jeśli jej z "http:" czy istnieje sposób pomiaru rozmiaru przed załadowaniem? – Rhodo

+1

Być może będziesz musiał użyć 'download.file()', a następnie sprawdź lokalnie rozmiar pliku. – Andrie

1

Jeśli nie chcesz, aby pobrać plik przed znając jego rozmiar, można spróbować coś takiego:

Uwaga: działa to tylko na komputerach Mac lub Linux.

file_url = 'http://math.ucdenver.edu/RTutorial/titanic.txt' 
curl_cmd = paste('curl -X HEAD -i', file_url) 
system_cmd = paste(curl_cmd, '|grep Content-Length |cut -d : -f 2') 

Powyższy będzie pakować razem ciąg być wykonywane przy użyciu system(). Łańcuch curl_cmd mówi curl, aby uzyskać tylko nagłówek pliku.

Pakiety ciągów na niektórych dodatkowych komendach, aby przeanalizować nagłówek i wyodrębnić tylko rozmiar pliku.

Teraz zadzwoń pod system() i użyj argumentu intern = TRUE, aby powiedzieć R, aby przytrzymał wyjście.

b <- system(system_cmd, intern = TRUE) 
## % Total % Received % Xferd Average Speed Time Time  Time Current 
##        Dload Upload Total Spent Left Speed 
## 0  0 0  0 0  0  0  0 --:--:-- --:--:-- --:--:-- 0 
## curl: (18) transfer closed 

Będzie pobierać tylko nagłówek pliku i przeanalizować go, aby uzyskać rozmiar pliku. Teraz b będzie rozmiar pliku w bajtach.


Następnie można zdecydować, jak otworzyć plik lub drukuj coś przyjazny jak:

print(paste("There are", as.numeric(b)/1e6, "mb in the file:", file_url)) 
## [1] "There are 0.055692 mb in the file: http://math.ucdenver.edu/RTutorial/titanic.txt" 
+0

Byłoby fajnie, gdyby ktoś mógł dzielić rozwiązanie, które działa we wszystkich środowiskach hosta. Próbowałem gryźć w "RCurl" przez około pięć minut, ale nie za bardzo się posunąłem. – neerajt

+1

https://stackoverflow.com/questions/20921593/how-to-determine-the-file-size-o--remote-download-without-entading-the-entire-f –

+0

Awesome! O wiele lepiej. – neerajt