read.csv चेतावनी 'उद्धृत स्ट्रिंग के भीतर EOF' फ़ाइल के पूर्ण पढ़ने को रोकता है


125

मेरे पास CSV फ़ाइल (24.1 MB) है जिसे मैं अपने R सत्र में पूरी तरह से नहीं पढ़ सकता। जब मैं एक स्प्रेडशीट प्रोग्राम में फ़ाइल खोलता हूं तो मैं 112,544 पंक्तियों को देख सकता हूं। जब मैंने इसे R में पढ़ा तो read.csvमुझे केवल 56,952 पंक्तियाँ और यह चेतावनी मिली:

cit <- read.csv("citations.CSV", row.names = NULL, 
                comment.char = "", header = TRUE, 
                stringsAsFactors = FALSE,  
                colClasses= "character", encoding= "utf-8")

Warning message:
In scan(file, what, nmax, sep, dec, quote, skip, nlines, na.strings,  :
  EOF within quoted string

मैं पूरी फाइल को R के साथ पढ़ सकता हूं readLines:

rl <- readLines(file("citations.CSV", encoding = "utf-8"))
length(rl)
[1] 112545

लेकिन मैं इसे एक तालिका के रूप में आर में वापस नहीं ला सकता (के माध्यम से read.csv):

write.table(rl, "rl.txt", quote = FALSE, row.names = FALSE)
rl_in <- read.csv("rl.txt", skip = 1, row.names = NULL)

Warning message:
In scan(file, what, nmax, sep, dec, quote, skip, nlines, na.strings,  :
  EOF within quoted string

मैं अपने Rसत्र में संपूर्ण फ़ाइल प्राप्त करने के लिए इस ईओएफ संदेश (जो एक चेतावनी से अधिक त्रुटि प्रतीत होता है) को कैसे हल या हल कर सकता हूं ?

मुझे CSV फ़ाइलों को पढ़ने के अन्य तरीकों के साथ समान समस्याएं हैं:

require(sqldf)
cit_sql <- read.csv.sql("citations.CSV", sql = "select * from file")
require(data.table)
cit_dt <- fread("citations.CSV")
require(ff)
cit_ff <- read.csv.ffdf(file="citations.CSV")

यहाँ मेरा सेशन हैइन्फो ()

R version 3.0.1 (2013-05-16)
Platform: x86_64-w64-mingw32/x64 (64-bit)

locale:
[1] LC_COLLATE=English_United States.1252  LC_CTYPE=English_United States.1252   
[3] LC_MONETARY=English_United States.1252 LC_NUMERIC=C                          
[5] LC_TIME=English_United States.1252    

attached base packages:
[1] tools     tcltk     stats     graphics  grDevices utils     datasets  methods   base     

other attached packages:
 [1] ff_2.2-11             bit_1.1-10            data.table_1.8.8      sqldf_0.4-6.4        
 [5] RSQLite.extfuns_0.0.1 RSQLite_0.11.4        chron_2.3-43          gsubfn_0.6-5         
 [9] proto_0.3-10          DBI_0.2-7   

जवाबों:


197

आपको उद्धृत करने को अक्षम करना होगा।

cit <- read.csv("citations.CSV", quote = "", 
                 row.names = NULL, 
                 stringsAsFactors = FALSE)

str(cit)
## 'data.frame':    112543 obs. of  13 variables:
##  $ row.names    : chr  "10.2307/675394" "10.2307/30007362" "10.2307/4254931" "10.2307/20537934" ...
##  $ id           : chr  "10.2307/675394\t" "10.2307/30007362\t" "10.2307/4254931\t" "10.2307/20537934\t" ...
##  $ doi          : chr  "Archaeological Inference and Inductive Confirmation\t" "Sound and Sense in Cath Almaine\t" "Oak Galls Preserved by the Eruption of Mount Vesuvius in A.D. 79_ and Their Probable Use\t" "The Arts Four Thousand Years Ago\t" ...
##  $ title        : chr  "Bruce D. Smith\t" "Tomás Ó Cathasaigh\t" "Hiram G. Larew\t" "\t" ...
##  $ author       : chr  "American Anthropologist\t" "Ériu\t" "Economic Botany\t" "The Illustrated Magazine of Art\t" ...
##  $ journaltitle : chr  "79\t" "54\t" "41\t" "1\t" ...
##  $ volume       : chr  "3\t" "\t" "1\t" "3\t" ...
##  $ issue        : chr  "1977-09-01T00:00:00Z\t" "2004-01-01T00:00:00Z\t" "1987-01-01T00:00:00Z\t" "1853-01-01T00:00:00Z\t" ...
##  $ pubdate      : chr  "pp. 598-617\t" "pp. 41-47\t" "pp. 33-40\t" "pp. 171-172\t" ...
##  $ pagerange    : chr  "American Anthropological Association\tWiley\t" "Royal Irish Academy\t" "New York Botanical Garden Press\tSpringer\t" "\t" ...
##  $ publisher    : chr  "fla\t" "fla\t" "fla\t" "fla\t" ...
##  $ type         : logi  NA NA NA NA NA NA ...
##  $ reviewed.work: logi  NA NA NA NA NA NA ...

मुझे लगता है कि इस तरह की लाइनों की वजह से ("कांटा" और "माइनस" की जाँच करें)

 readLines("citations.CSV")[82]
[1] "10.2307/3642839,10.2307/3642839\t,\"Thorn\" and \"Minus\" in Hieroglyphic Luvian Orthography\t,H. Craig Melchert\t,Anatolian Studies\t,38\t,\t,1988-01-01T00:00:00Z\t,pp. 29-42\t,British Institute at Ankara\t,fla\t,\t,"

धन्यवाद, यह एक आसान तय है। अब आप freadइस स्थिति में काम करने के बारे में क्या सोचते हैं ? मुझे पसंद है क्योंकि यह बहुत तेजी से है read.csv। लेकिन freadएक quoteतर्क लेने के लिए प्रतीत नहीं होता है ..
बेन

1
@ क्योंकि मैंने इसे सफलता के बिना भी काम करने की कोशिश की और जैसा कि आपने बताया कि freadसामान्य रूप से एम्बेडेड उद्धरण के साथ अच्छा नहीं होता है, लेकिन मुझे यकीन है कि जल्द ही एक वर्कअराउंड होगा। stackoverflow.com/questions/16094025/…
डिकोआ जूल

1
मेरे पास 7,000 पंक्तियाँ थीं जब मैंने उपयोग किया write.csv()था और 403 के साथ वापस आ रहा था read.csv()। उद्धरण जोड़ना = "" मुझे 410 पंक्तियों तक मिला। read.table()कोई बेहतर नहीं है मुझे आश्चर्य है कि और क्या कोशिश की जा सकती है ...
हैक-आर

2
हैक-आर के रूप में एक ही समस्या, उद्धरण = "जोड़कर मेरी पंक्ति को 30,000 से बढ़ा दिया लेकिन मैं अभी भी 200,000 से अधिक याद कर रहा हूं।
एसजेडीएस

1
क्या आप कृपया एक पंक्ति लिख सकते हैं कि आपको इसे जोड़ने की आवश्यकता क्यों है। (मैं एक पायथन प्रोग्रामर हूं जो आर सीखने की कोशिश कर रहा है)। अन्यथा जवाब सही (+1) है
भार्गव राव

10

मैं एक नया-ish R उपयोगकर्ता हूं और मुझे लगा कि मैं इसे किसी और की मदद करने के मामले में पोस्ट करूंगा। मैं एक पाठ फ़ाइल (कॉमा के साथ अलग) से डेटा में पढ़ने की कोशिश कर रहा था जिसमें कुछ स्पेनिश वर्ण शामिल थे और मुझे इसे जानने के लिए हमेशा के लिए लगा। मुझे पता था कि मुझे UTF-8 एन्कोडिंग का उपयोग करने की आवश्यकता है, हेडर आर्ग को TRUE पर सेट करें, और मुझे "," के लिए sep एगेंमेन्ट सेट करने की आवश्यकता है, लेकिन तब मुझे हैंग अप भी मिल गया। इस पोस्ट को पढ़ने के बाद मैंने फिल अर्ग को TRUE पर सेट करने का प्रयास किया, लेकिन फिर वही "उद्धृत स्ट्रिंग के भीतर ईओएफ" मिला, जिसे मैं ऊपर के रूप में ठीक करने में सक्षम था। मेरा सफल read.table इस तरह दिखता है:

target <- read.table("target2.txt", fill=TRUE, header=TRUE, quote="", sep=",", encoding="UTF-8")

परिणाम में स्पैनिश भाषा के पात्र हैं और मेरे पास मूल रूप से वही डीम्स हैं, इसलिए मैं इसे सफल कह रहा हूं! सबको शुक्रीया!


6

आर मदद अनुभाग में, जैसा कि ऊपर बताया गया है, बस जोड़कर पूरी तरह से अक्षम करना, बस जोड़कर:

    quote = "" 

read.csv के लिए () मेरे लिए काम किया।

त्रुटि, "उद्धृत स्ट्रिंग के भीतर ईओएफ", के साथ हुई:

    > iproscan.53A.neg     = read.csv("interproscan.53A.neg.n.csv",
    +                        colClasses=c(pb.id      = "character",
    +                                     genLoc     = "character",
    +                                     icode      = "character",
    +                                     length     = "character",
    +                                     proteinDB  = "character",
    +                                     protein.id = "character",
    +                                     prot.desc  = "character",
    +                                     start      = "character",
    +                                     end        = "character",
    +                                     evalue     = "character",
    +                                     tchar      = "character",
    +                                     date       = "character",
    +                                     ipro.id    = "character",
    +                                     prot.name  = "character",
    +                                     go.cat     = "character",
    +                                     reactome.id= "character"),
    +                                     as.is=T,header=F)
    Warning message:
    In scan(file, what, nmax, sep, dec, quote, skip, nlines, na.strings,  :
      EOF within quoted string
    > dim(iproscan.53A.neg)
    [1] 69383    16

और पढ़ी गई फाइल 6,619 लाइनों से गायब थी। लेकिन उद्धरण को अक्षम करके

    > iproscan.53A.neg     = read.csv("interproscan.53A.neg.n.csv",
    +                        colClasses=c(pb.id      = "character",
    +                                     genLoc     = "character",
    +                                     icode      = "character",
    +                                     length     = "character",
    +                                     proteinDB  = "character",
    +                                     protein.id = "character",
    +                                     prot.desc  = "character",
    +                                     start      = "character",
    +                                     end        = "character",
    +                                     evalue     = "character",
    +                                     tchar      = "character",
    +                                     date       = "character",
    +                                     ipro.id    = "character",
    +                                     prot.name  = "character",
    +                                     go.cat     = "character",
    +                                     reactome.id= "character"),
    +                                     as.is=T,header=F,**quote=""**)    
    > 
    > dim(iproscan.53A.neg)
    [1] 76002    16

बिना त्रुटि के काम किया गया और सभी लाइनों को सफलतापूर्वक पढ़ा गया।


4
आप पहले वाले उत्तर को दोहरा रहे हैं और फिर कोड ब्लॉक के अंदर अनावश्यक फ़्लैंकिंग डबल तारांकन के द्वारा इसकी उपयोगिता को अपंग कर रहे हैं।
IRTFM

3

मैं भी इस समस्या में भाग गया, और एक समान EOF त्रुटि का उपयोग कर काम करने में सक्षम था:

read.table("....csv", sep=",", ...)

ध्यान दें कि विभाजक पैरामीटर अधिक सामान्य के भीतर परिभाषित किया गया है read.table()


2
नमस्ते, यह मेरे लिए काम नहीं करता है ... मुझे read.table ("। Csv" में एक त्रुटि मिली,: कॉलम नामों की तुलना में अधिक कॉलम - लगता है कि स्किप करना (स्किप करना = 6) सही ढंग से काम नहीं करता है ...
22

3

दरअसल, read.csv()टेक्स्ट कंटेंट वाली फाइल को पढ़ने के लिए उपयोग करना अच्छा विचार नहीं है, उद्धरण को अक्षम करें क्योंकि सेट quote=""केवल एक अस्थायी समाधान है, यह केवल सेपरेट उद्धरण चिह्नों के साथ काम करता है। अन्य कारण हैं, जैसे कि कुछ विशेष वर्णों की चेतावनी।

स्थायी समाधान (उपयोग करना read.csv()), यह पता लगाना कि वे विशेष वर्ण क्या हैं और उन्हें समाप्त करने के लिए एक नियमित अभिव्यक्ति का उपयोग करना एक विचार है।

क्या आपने कभी पैकेज को स्थापित करने {data.table}और fread()फ़ाइल को पढ़ने के लिए उपयोग करने के बारे में सोचा है । यह बहुत तेज़ है और आपको इस EOF चेतावनी से परेशान नहीं करेगा। ध्यान दें कि यह जिस फ़ाइल को लोड करता है वह डेटाटैब ऑब्जेक्ट के रूप में संग्रहीत किया जाएगा, लेकिन डेटा.फ्रेम ऑब्जेक्ट नहीं। वर्ग data.table में कई अच्छी विशेषताएं हैं, लेकिन फिर भी, as.data.frame()यदि आवश्यक हो, तो आप इसे बदल सकते हैं ।


2

मुझे भी ऐसी ही समस्या थी: EOF -warning और डेटा का केवल हिस्सा read.csv () के साथ लोड हो रहा था। मैंने उद्धरण = "की कोशिश की, लेकिन इसने केवल EOF -warning को हटा दिया।

लेकिन पहली पंक्ति को देखकर जो लोड नहीं हो रहा था, मैंने पाया कि एक विशेष चरित्र, एक तीर → (हेक्साडेसिमल मान 0x1A) में से एक सेल में था। तीर को हटाने के बाद मुझे सामान्य रूप से लोड करने के लिए डेटा मिला।


1
एक ही समस्या है, क्या इसे हल करने का एक और तरीका है, बिना किसी मैनुअल हस्तक्षेप के?
मोहित

2

मुझे भी ऐसी ही समस्या थी। लेकिन मेरे मामले में, पाठ के कुछ मूल्यों में एपोस्ट्रोफिस (यानी एकल उद्धरण चिह्न) की उपस्थिति के कारण मुद्दे का कारण था। यह विशेष रूप से अक्सर होता है जब फ्रेंच में ग्रंथों सहित डेटा के साथ काम करते हैं, उदाहरण के लिए «L'autre पत्रिकाओं»।

तो, समाधान केवल «'' प्रतीक को बाहर करने के लिए उद्धरण तर्क की डिफ़ॉल्ट सेटिंग को समायोजित करने के लिए था, और इस प्रकार, उद्धरण =" \ "" ( केवल दोहरे उद्धरण चिह्न ) का उपयोग करके , सब कुछ ठीक काम किया।

मुझे उम्मीद है कि आप में से कुछ मदद कर सकते हैं। चीयर्स।


0

Readr पैकेज इस समस्या को हल करेंगे।

install.packages('readr')
library(readr)
readr::read_csv('yourfile.csv')
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.