2015-06-04 7 views
0

Так что я взял некоторые публично доступные данные, что выглядит как это -Golang файл только чтение чтение последней строки

это файл

http://expirebox.com/download/b149b744768fb11aee9c5e26ad409bcc.html

,,,% of Total Expenditure,,, 
Function Code,Type of Activity,Expenditure,Dollars/Student (ADA),"This District (ADA 49,497)",All Unified School Districts,Statewide Average 
1000-1999ÊÊ,INSTRUCTIONÊÊ,"$249,397,226","$5,039",42%,62%,62% 
1000,Instruction,"$247,472,790ÊÊ","$5,000",42%,48%,49% 
1110,Special Education: Separate Classes,"$1,004,074",$20,N/A,N/A,N/A 
1120,Special Education: Resource Specialist Instruction,"$781,629",$16,N/A,N/A,N/A 
1130,Special Education: Supplemental Aids & Services in Regular Classrooms,"$46,747",$1,N/A,N/A,N/A 
1180,Special Education: Nonpublic Agencies/Schools (NPA/S),N/A,N/A,N/A,N/A,N/A 
1190,Special Education: Other Specialized Instructional Services,"$91,985",$2,N/A,N/A,N/A 
1100-1199,Instruction - Special Education,"$1,924,436ÊÊ",$39,0%,14%,13% 
"Subtotal, INSTRUCTION",,"$249,397,226","$5,039",42%,62%,62% 
2000-2999ÊÊ,INSTRUCTION-RELATED SERVICESÊÊ,"$132,783,414","$2,683",22%,12%,12% 
2100,Instructional Supervision and Administration,"$89,551,041","$1,809",N/A,N/A,N/A 
2110,Instructional Supervision,N/A,N/A,N/A,N/A,N/A 
2120,Instructional Research,N/A,N/A,N/A,N/A,N/A 
2130,Curriculum Development,"$348,369",$7,N/A,N/A,N/A 
2140,In-house Instructional Staff Development,"$19,855",$0,N/A,N/A,N/A 
2150,Instructional Administration of Special Projects,N/A,N/A,N/A,N/A,N/A 
2100-2199,Instructional Supervision and Administration,"$89,919,265ÊÊ","$1,817",15%,4%,4% 
2200,Administrative Unit (AU) of a Multidistrict SELPA,$0,$0,0%,0%,0% 
2420,"Instructional Library, Media, and Technology","$8,295,033ÊÊ",$168,1%,1%,1% 
2490,Other Instructional Resources,"$538,734",$11,N/A,N/A,N/A 
2495,Parent Participation,"$97,830",$2,N/A,N/A,N/A 
2490-2495,Other Instructional Resources,"$636,565ÊÊ",$13,0%,1%,0% 
2700,School Administration,"$33,932,551ÊÊ",$686,6%,7%,7% 
"Subtotal, INSTRUCTION-RELATED SERVICES",,"$132,783,414","$2,683",22%,12%,12% 
3000-3999ÊÊ,PUPIL SERVICESÊÊ,"$45,325,938",$916,8%,8%,8% 
4000-4999ÊÊ,ANCILLARY SERVICESÊÊ,"$2,207,263",$45,0%,1%,1% 
5000-5999ÊÊ,COMMUNITY SERVICESÊÊ,$0,$0,0%,0%,0% 
6000-6999ÊÊ,ENTERPRISEÊÊ,"$4,264",$0,0%,0%,0% 
7000-7999ÊÊ,GENERAL ADMINISTRATIONÊÊ,"$27,916,858",$564,5%,5%,6% 
8000-8999ÊÊ,PLANT SERVICESÊÊ,"$55,172,247","$1,115",9%,11%,10% 
9000-9999ÊÊ,OTHER OUTGOÊÊ,"$81,981,716",N/A,14%,2%,2% 
"Total Expenditures, All Activities",,"$594,788,926","$12,017",100%,100%,100% 

Это в формате CSV.

Я попробовал этот код

file, err := os.Open("expenses.csv") 
if err != nil { 
    log.Fatal(err) 
} 
defer file.Close() 

scanner := bufio.NewScanner(file) 
for scanner.Scan() { 
    fmt.Println(scanner.Text()) 
} 

if err := scanner.Err(); err != nil { 
    log.Fatal(err) 
} 

и это

content, err := ioutil.ReadFile("expenses.csv") 

lines := strings.Split(string(content), "\n") 

fmt.Println(lines) 

check(err) 

dat, err := os.Open("expenses.csv") 
check(err) 

defer dat.Close() 

reader := csv.NewReader(dat) 
reader.LazyQuotes = true 

reader.FieldsPerRecord = -1 

rawCSVData, err := reader.ReadAll() 

check(err) 
fmt.Println(rawCSVData) 

for _, each := range rawCSVData { 
    fmt.Println(each) 
} 

где чек

func check(e error) { 
    if e != nil { 
     panic(e) 
    } 
} 

В обоих случаях я получаю этот результат -

"Total Expenditures, All Activities",,"$594,788,926","$12,017",100%,100%,100%,1%15%,4%,4%AA,N/A,N/Anified School Districts,Statewide Average 

Вместо всех линий.

Почему я только читаю последнюю строку?

+0

Я не могу воспроизвести это. Я подозреваю, что ваш файл csv не совсем то, что вы думаете. Возможно, окончание строк странно? (Не заканчивается линия Windows, это поддерживается, но что-то еще? Пробелы?) –

+0

Должен ли я загрузить его? – praks5432

+0

стоит попробовать. Вы также можете посмотреть на него в гексагоне, таком как xxd, и убедиться, что это так, как вы думаете. И, конечно же, убедитесь, что вы открываете файл, который, как вы думаете. –

ответ

1

Основная проблема заключается в том, что этот файл имеет \r окончания строки. Он также недействителен UTF-8. Вместе они приведут к большому количеству неприятностей.

Во-первых, мы можем увидеть то, что находится в файле с помощью xxd

00000000: 2c2c 2c25 206f 6620 546f 7461 6c20 4578 ,,,% of Total Ex 
00000010: 7065 6e64 6974 7572 652c 2c2c 0d46 756e penditure,,,.Fun 

Если вы посмотрите, вы увидите, что линия окончание 0d, который \r. Scanner нужен либо \r\n, либо \n.

Далее вы можете столкнуться с проблемами, потому что это не UTF-8. Все эти Ê есть действительно 0xCA, что не является допустимым кодировкой UTF-8. Мы можем видеть, что в xxd снова:

000000b0: 3939 39ca ca2c 494e 5354 5255 4354 494f 999..,INSTRUCTIO 
000000c0: 4eca ca2c 2224 3234 392c 3339 372c 3232 N..,"$249,397,22 

Go, вероятно, просто отправить его вместе, как байт (и получить Ê), которая является то, что многие редакторы пытаются сделать, но это может вызвать проблемы.

Если возможно, переформатируйте этот файл, чтобы использовать окончание строк Unix или Windows в UTF-8.

+0

- это лучший способ обойти это? переформатировать? – praks5432

+0

есть ли способ программно сделать это? – praks5432

+0

В идеале, повторно экспортируйте файл. В противном случае вы можете разделить на '\ r', а не' \ n' как начало. –