我生成了一个包含外来字符的简单CSV文件.我已经注意到,如果我没有包含字节顺序标记,外国字符在Excel中没有正确显示(但是当存在BOM时它们看起来很好).
如何在首次创建文件时将BOM添加到文件的开头?我尝试了以下内容并且无法正常工作: - /
function processForm($competition, $competitionEntry) {
$BOM = "\xEF\xBB\xBF"; // UTF-8 BOM
$filename = $competition->ID.".csv";
$file = "entries/".$filename;
$fields = array_keys($competitionEntry);
$submittedForm = $competitionEntry;
if(file_exists($file)) {
$fp = fopen($file, 'a');
if($fp &&
fputcsv($fp, $submittedForm) &&
fclose($fp)) {
return true;
}
} else { // CREATE NEW FILE
$fp = fopen($file, 'w');
if($fp &&
fputcsv($fp, $BOM) && // WRITE BOM TO FILE
fputcsv($fp, $fields) &&
fputcsv($fp, $submittedForm) &&
fclose($fp)) {
return true;
}
}
return false;
}
Run Code Online (Sandbox Code Playgroud) 我有一个扩展名为“.tsv”的文本文件。它具有 UTF-8 编码并包含西里尔字符。当我尝试使用“打开方式”->“Excel”功能打开它时,Excel没有显示正确的字符,而如果我以同样的方式用Notepad++打开它,我可以正确地看到字符。我想避免使用向导将文件导入 Excel 中。
我有一个简单的项目,从旅游网站抓取评论并将其存储在excel文件中.评论可以是西班牙语,日语或任何其他语言,评论有时也包含特殊符号,如"❤❤".
我需要存储所有数据(如果无法写入,可以排除特殊符号).
我能够抓取我想要的数据并将其打印在控制台中(如日文文本),但问题是将其存储在csv文件中,它显示错误消息,如下所示
我尝试使用utf-8编码打开文件(如下面的评论中所述),但随后它将数据保存在一些没有意义的奇怪符号中....并且无法找到问题的答案.有什么建议.
我使用的是python 3.5.3
我的python代码:
from selenium import webdriver
from bs4 import BeautifulSoup
import time
import re
file = "TajMahalSpanish.csv"
f = open(file, "w")
headers = "rating, title, review\n"
f.write(headers)
pages = 119
pageNumber = 2
option = webdriver.ChromeOptions()
option.add_argument("--incognito")
browser = webdriver.Chrome(executable_path='C:\Program Files\JetBrains\PyCharm Community Edition 2017.1.5\chrome webdriver\chromedriver', chrome_options=option)
browser.get("https://www.tripadvisor.in/Attraction_Review-g297683-d317329-Reviews-Taj_Mahal-Agra_Agra_District_Uttar_Pradesh.html")
time.sleep(10)
browser.find_element_by_xpath('//*[@id="taplc_location_review_filter_controls_0_form"]/div[4]/ul/li[5]/a').click()
time.sleep(5)
browser.find_element_by_xpath('//*[@id="BODY_BLOCK_JQUERY_REFLOW"]/span/div[1]/div/form/ul/li[2]/label').click()
time.sleep(5)
while (pages):
html = browser.page_source
soup = BeautifulSoup(html, "html.parser")
containers = soup.find_all("div",{"class":"innerBubble"})
showMore = soup.find("span", {"onclick": "widgetEvCall('handlers.clickExpand',event,this);"})
if showMore:
browser.find_element_by_xpath("//span[@onclick=\"widgetEvCall('handlers.clickExpand',event,this);\"]").click()
time.sleep(3)
html = …Run Code Online (Sandbox Code Playgroud) 有没有一种干净的方法可以附加SEP=,到由 创建的 CSV 文件的开头Export-CSV?
注意:这是一个 XY 问题;有关我的根本问题的信息,请参阅下面为什么需要这个。我要求提供 SEP 部分,因为这似乎是最好的解决方案,因为我需要继续使用 UTF8 CSV,并且不希望用户必须更改其工作方式以避免出现问题。
\n\n简单的选择是这样的;然而感觉很混乱(即我们释放文件上的锁然后必须返回并更新它)。
\n\nfunction Repair-Csv {\n [CmdletBinding()]\n Param (\n [Parameter(Mandatory = $true, ValueFromPipeline = $true)]\n [string]$Path\n )\n Begin {\n $sep = "SEP=,`r`n" \n }\n Process {\n $sep + (Get-Content -Path $Path -Raw) | Set-Content -Path $Path\n }\n}\nRun Code Online (Sandbox Code Playgroud)\n\n我尝试创建一个代理函数(下面的代码),但发现包装的Export-CSV命令不会将其输出附加到我的调整文件中,而是读取我已经编写的内容并尝试用作SEP=列标题;所以我最终没有数据(除非我导出的对象的属性之一恰好被称为SEP=.
# $MetaData = New-Object System.Management.Automation.CommandMetaData (Get-Command \'Export-CSV\')\n# [System.Management.Automation.ProxyCommand]::Create($MetaData)\nfunction Export-CsvAdvanced {\n [CmdletBinding(DefaultParameterSetName=\'Delimiter\', SupportsShouldProcess=$true, …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用JavaScript下载CVS文件.该CSV包含法语文本.我正在使用blob创建文件
var blob = new Blob([ csv ], {
type : 'text/csv;charset=utf-8'
});
var csvUrl = window.URL.createObjectURL(blob);
Run Code Online (Sandbox Code Playgroud)
但是当我打开csv文件时,它会以ANSII格式显示内容,因为法语字符转换为某些未知字符.
但是如果我打开与文本相同的文件,编码就可以了(UTF-8).
Example: Text I am trying to download "Opération"
Text Visible in Excel (.csv) ==> Opération <== With unknown characters
Text if opened in Notpad++ ==> Opération <== Correct UTF-8
Run Code Online (Sandbox Code Playgroud)
如何使用UTF-8编码直接打开下载CSV文件?我不希望用户在excel中更改任何内容.我想要一些javascript格式,以便excel可以识别我的所有字符而不管其编码.有可能做点什么吗?
这是 Flask 视图的一个最小示例,它生成 CSV (python 2.7)。
\n\n# -*- coding: utf-8 -*-\n\nimport csv\nimport StringIO\n\nfrom flask import Flask, Response\n\napp = Flask(__name__)\n\n\n@app.route('/example.csv')\ndef example_csv():\n f = StringIO.StringIO()\n writer = csv.writer(f)\n writer.writerow(['Header 1', 'Header 2', 'Header 3'])\n writer.writerows([unicode(_).encode('utf-8') for _ in row] for row in (['1', '2', '3'], \n ['a', 'b', 'c'],\n [u'\xc2\xa3', u'\xe2\x82\xac', u'\xc2\xa5']))\n response = Response(f.getvalue(), mimetype='text/csv')\n response.headers['Content-Disposition'] = u'attachment; filename=example.csv'\n return response\n\n\nif __name__ == '__main__':\n app.run(debug=True)\nRun Code Online (Sandbox Code Playgroud)\n\n在 Excel 中打开给出:
\n\nHeader 1 Header 2 Header 3\n1 2 3\na b c\n\xc3\x82\xc2\xa3 …Run Code Online (Sandbox Code Playgroud) 我现在尝试输出用塞尔维亚语编写的数据框。首先,我尝试使用 utf-8 或 utf-8-sig 编解码器。有多个列,这是正确的。但是输出的csv文件存在乱码问题。然后我尝试使用 utf-16 输出数据帧。这次编解码器是正确的。但输出的 csv 只有一列,例如:
我的代码是:
df1.to_csv('people.csv', encoding = "utf-16",index = False)
Run Code Online (Sandbox Code Playgroud)
原始数据帧的头部是:
如果我使用 utf-16,输出为(编解码器正确但列不正确):
我该如何解决这个问题。谢谢!
csv ×4
excel ×3
python ×3
utf-8 ×2
blob ×1
flask ×1
fputcsv ×1
javascript ×1
php ×1
powershell ×1
python-3.x ×1
selenium ×1
web-scraping ×1