python导出csv不带引号的句子_生成的csv文件中不需要的双引号

6 个答案:

答案 0 :(得分:44)

这对我有用

CSVWriter writer =

new CSVWriter(new FileWriter(csv), ',', CSVWriter.NO_QUOTE_CHARACTER);

答案 1 :(得分:12)

您应该澄清“不受欢迎的”引号的含义。

我不希望它引用所有内容,只引用包含的字段

嵌入式逗号,引号和换行符(引用一切都是不必要的

使我的文件更大),或

我不想引用任何内容,并且我了解如果CSV包含嵌入的逗号,引号和换行符,我的CSV将无效

醇>

如果这是第一个选项,那么opencsv不支持这个 - 它要么引用一切,要么什么都不引用。如果您想要一个仅在必要时引用的开源CSV库(如果需要,可以Super CSV),请查看quote everything too。

如果这是第二个选项,那么请使用Sheldon的答案,但请注意,如果CSV包含嵌入的逗号,引号和换行符,则CSV将无效。

例如,如果我正在阅读您的CSV文件,我怎么知道以下实际上只是一个包含2个字段的记录?

P Sherman, 42 Wallaby Way,

Sydney, AUSTRALIA

如果引用得当,那就很明显了,即

P Sherman, "42 Wallaby Way,

Sydney, AUSTRALIA"

仅供参考,以下是与RFC4180引用相关的规则(CSV的MIME类型定义)。

5每个字段可能包含也可能不包含在双引号中(但是

某些程序(如Microsoft Excel)不使用双引号

在所有)。如果字段没有用双引号括起来,那么

双引号可能不会出现在字段内。例如:

"aaa","bbb","ccc" CRLF

zzz,yyy,xxx

6包含换行符(CRLF),双引号和逗号的字段

应该用双引号括起来。例如:

"aaa","b CRLF

bb","ccc" CRLF

zzz,yyy,xxx

7如果使用双引号括起字段,则使用双引号

出现在一个字段内必须通过前面的方式进行转义

另一个双引号。例如:

"aaa","b""bb","ccc"

答案 2 :(得分:4)

如果您不想在生成的CSV文件的值中使用引号,则必须以这种方式创建CSVWriter对象:

CSVWriter writer = new CSVWriter(new FileWriter(filePath),

CSVWriter.DEFAULT_SEPARATOR,

CSVWriter.NO_QUOTE_CHARACTER,

CSVWriter.DEFAULT_ESCAPE_CHARACTER,

CSVWriter.RFC4180_LINE_END);

关键是CSVWriter.NO_QUOTE_CHARACTER。您可以自定义其他构造函数参数的值。

答案 3 :(得分:1)

private void writeFile(String fileAbsolutePath,ListcsvLines)抛出IOException {

final char csvDelimeter = ',';

CSVWriter csvWriter = new CSVWriter(new FileWriter(new File(fileAbsolutePath)),csvDelimeter,CSVWriter

.NO_QUOTE_CHARACTER);

CSVParser parser = new CSVParser();

for(String csvLine : csvLines){

String[] csvVals = parser.parseLine(csvLine);

csvWriter.writeNext(csvVals);

}

csvWriter.flush();

}

调用:writeFile(fileAbsolutePath,csvLinesList);

Shamis回答的工作示例,对我来说很好。

答案 4 :(得分:0)

我遇到的一种情况是我面对的是显示在.csv文件中的数据,该数据的两边都有三个引号。这是由于我的数据在excel中带有引号。第二个我创建了一个.csv文件,我将打开以查看所需的更多引用。在网上进行大量搜索后,我找到了一些代码,并进行了如下调整以适合我:-

Public Sub OutputQuotedCSV()

Const QSTR As String = ""

Dim myRecord As Range

Dim myField As Range

Dim nFileNum As Long

Dim sOut As String

nFileNum = FreeFile

Open "TheNameOfYourFile.txt" For Output As #nFileNum

For Each myRecord In Range("A1:A" & _

Range("A" & Rows.Count).End(xlUp).Row)

With myRecord

For Each myField In Range(.Cells(1), _

Cells(.Row, 256).End(xlToLeft))

'I didn't want my Header Row touched but wanted it added into the csv file

'There's probably an easier way but this worked perfectly for me

If myField.Text = "HEADER 1" Then

sOut = sOut & QSTR & _

Replace(myField.Text, QSTR, QSTR & QSTR) & " "

ElseIf myField.Text = "HEADER 2" Then

sOut = sOut & QSTR & _

Replace(myField.Text, QSTR, QSTR & QSTR) & " "

ElseIf myField.Text = "HEADER 3" Then

sOut = sOut & QSTR & _

Replace(myField.Text, QSTR, QSTR & QSTR) & " "

ElseIf myField.Text = "HEADER 4" Then

sOut = sOut & QSTR & _

Replace(myField.Text, QSTR, QSTR & QSTR) & " "

ElseIf myField.Text = "HEADER 5" Then

sOut = sOut & QSTR & _

Replace(myField.Text, QSTR, QSTR & QSTR) & " "

ElseIf myField.Text = "HEADER 6" Then

sOut = sOut & QSTR & _

Replace(myField.Text, QSTR, QSTR & QSTR) & " "

Else

'I didn't want my first column to start with "," so I added the code below

If myField.Cells.Column = 1 Then

sOut = sOut & QSTR & _

Replace(myField.Text, QSTR, QSTR & QSTR) & QSTR

Else

sOut = sOut & "," & QSTR & _

Replace(myField.Text, QSTR, QSTR & QSTR) & QSTR

End If

End If

Next myField

Print #nFileNum, Mid(sOut, 1)

sOut = Empty

End With

Next myRecord

Close #nFileNum

End Sub

此代码将删除多余的引号,并在数据的开头和结尾仅用单引号将数据保留。我希望这对某人有帮助,如果我做错了格式或未正确显示数据,请原谅。我只是想帮助别人。请记住,这根本不是我的代码。我只是让它为我工作,我怀疑其他人正在努力使我在这里取得成就。

原始代码可以在这里http://www.mcgimpsey.com/excel/textfiles.html#csvwithquotes中找到

答案 5 :(得分:0)

我也遇到了与打开csv相同的问题,并修复了我使用转义字符的问题。

代表:

CSVReader csvReader = new CSVReader(new FileReader(fileName), seprator,escaped_character);

在这里打开csv默认使用双引号作为escape_character(据我所知)

在我的情况下,我使用分隔符作为管道符号(|)

A2 | G A A | Thilina | 9022V | 1 | 2 | 3 | 4 |“Rubasingha”|'Abc | MATARA“|'No'| 2012 | 1668.88

在这里“Rubasingha”打开并关闭双引号,在'否'中也打开并关闭单引号。这两个在默认打开csv中完美地工作

但是当我们使用'Abc时 - 只打开单引号 - 这也可以正常使用

但MATARA“或”MATARA - 在这里我们有一个双引号 - 在我的情况下,这会在使用open csv读取CSV时产生错误

有一些构造函数可以满足您自己的分隔符和引号字符的需求。假设您正在为分隔符使用选项卡,您可以执行以下操作:

CSVReader reader = new CSVReader(new FileReader("yourfile.csv"), '\t');

如果您单独引用转义字符而不是双引号,则可以使用三个arg构造函数:

CSVReader reader = new CSVReader(new FileReader("yourfile.csv"), '\t', '\'');

如果您知道文件中的内容直到稍后才开始,您也可以跳过文件的前几行。因此,例如,您可以通过执行以下操作跳过前两行:

CSVReader reader = new CSVReader(new FileReader("yourfile.csv"), '\t', '\'', 2);

所以我将我的默认转义字符更改为(^)符号,而不使用双引号作为转义字符。

CSVReader csvReader = new CSVReader(new FileReader(fileName), '|','^');

这是我解决问题的方法。感谢

你可能感兴趣的:(python导出csv不带引号的句子_生成的csv文件中不需要的双引号)