当我读入包含
的csv文件时“号码”, “文本”
1, “row1text \”
2, “row2text”
使用命令
using DataFrames
readtable(filename.csv)
我得到的数据帧只有一行。显然,第一行中文本末尾的反斜杠是个问题。这是预期的行为吗?有没有其他方法可以避免这个问题?
作为旁注:以下工作正常(即我得到两行),但在阅读大文件显然是不切实际的
df = csv"""
"number","text"
1,"row1text\"
2,"row2text"
"""
答案 0 :(得分:1)
由于反斜杠是默认情况下的转义字符,因此它会转义引号并将所有内容混淆。一种解决方法是使用CSV.jl
包并指定一个不同的转义字符:
julia> using CSV
julia> CSV.read("filename.csv", escapechar = '~')
2×2 DataFrames.DataFrame
│ Row │ number │ text │
├─────┼────────┼─────────────┤
│ 1 │ 1 │ "row1text\" │
│ 2 │ 2 │ "row2text" │
但是你必须确保~
字符不会逃避其他内容。可能有更好的方法可以做到这一点,但这可能是解决问题的一个方法。
另一种方法是逐行处理数据。这是一个过于复杂的例子:
julia> open("filename.csv", "r") do f
for (i, line) in enumerate(eachline(f))
if i == 1
colnames = map(Symbol, split(line, ','))
global df = DataFrame(String, 0, length(colnames))
rename!(df,
Dict([(old_name, new_name) for (old_name, new_name) in zip(names(df), colnames)]))
else
new_row = map(String, split(replace(line, "\\\"", "\""), ','))
# replace quotes around vales
new_row = map(x -> replace(x, "\"", ""), new_row)
push!(df, new_row)
end
end
end
julia> df
2×2 DataFrames.DataFrame
│ Row │ "number" │ "text" │
├─────┼──────────┼────────────┤
│ 1 │ "1" │ "row1text" │
│ 2 │ "2" │ "row2text" │