【问题标题】:Problem in reading mu(μ) character in python在 python 中读取 mu(μ) 字符的问题
【发布时间】:2021-11-18 04:56:27
【问题描述】:

我有一个输入文件,其中一行有多个 mu(μ) 字符。 Python 代码只是打开文件并进行一些操作,然后我们将该文件保存为 .csv 格式。当我将该文件保存在 .csv 中时,它会产生一些奇怪而有趣的字符 (�)。附件图片显示了我在 Excel 中打开时的输入文件和输出文件。

输入 CSV 文件:

输出 CSV 文件:

from pathlib import Path
import pandas as pd
import time
import argparse

parser = argparse.ArgumentParser(description='Process some integers.')

parser.add_argument('path',
                    help='define the directory to folder/file')

start = time.time()

def main(path_files):
    rs_columns = "SourceFile,RowNum,SampleID,Method,Element,Result".split(",")
    rs = pd.DataFrame(columns=rs_columns)
    if path_files.is_file():
        fnames = [path_files]
    else:
        fnames = list(Path(path_files).glob("*.csv"))
        
    for fn in fnames:
        if "csv" in str(fn):
            #df = pd.read_csv(str(fn))
            df = pd.read_csv(str(fn), header=None, sep='\n')
            df = df[0].str.split(',', expand=True)
        else:
            print("Unknown file", str(fn))
            
        non_null_columns = [col for col in df.columns if df.loc[:, col].notna().any()]    
        
        # loop thru each column for the whole file and create a row of results in the output file
        for i in range(1,len(non_null_columns)):
            SourceFile = Path(fn.name)
            Method = "WetScreening"
            Element = df.iloc[1,i]
            print(Element)
            for j in range(2,len(df)):
                RowNum = j+1
                Result = df.iloc[j,i]
                SampleID = df.iloc[j,0]                
                rs = rs.append(pd.DataFrame({
                    "SourceFile": [SourceFile],
                    "RowNum": [RowNum],
                    "SampleID": [SampleID],
                    "Method": [Method],
                    "Element": [Element],                                        
                    "Result": [Result]
                }),ignore_index=True)
    rs.to_csv("check.csv",index=False)
    print("Output: check.csv")
  
if __name__== "__main__":
    start = time.time()
    args = parser.parse_args()
    path = Path(args.path)
    main(path)
    print("Processed time: ", time.time()-start)

附加文件here

有什么帮助吗????

【问题讨论】:

    标签: python pandas


    【解决方案1】:

    尝试编码为 utf-8:

    rs.to_csv("check.csv",index=False, encoding='UTF-8')
    

    另见Pandas df.to_csv("file.csv" encode="utf-8") still gives trash characters for minus sign 该答案提到了作为 utf-8 签名的文件开头的 BOM 字节(0xEF、0xBB、0xBF)。

    rd.to_csv('file.csv', index=False, encoding='utf-8-sig')
    

    【讨论】:

    • 此方法无效。这个方法我已经试过了。
    • 在记事本中打开文件时,指定utf-8编码。
    • 当你打开输入文件时,你使用什么编码?同样的问题也适用于阅读 CSV。您需要保持一致的编码。
    • 它不工作。 rd.to_csv('file.csv', index=False, encoding='utf-8-sig') 当我尝试这种方法时,当我在 excel 中打开它时显示一些奇怪/有趣的字符。
    • 您没有显示输出 csv 文件。当您将其读入 Excel 时,您会显示出现的内容。这往往不是一回事。要查看 csv 中的 真正 是什么,请在具有适当编码支持的文本编辑器中打开它,例如免费的 Notepad++。
    猜你喜欢
    • 2014-04-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-01
    • 1970-01-01
    • 2021-04-01
    相关资源
    最近更新 更多