【问题标题】:"\r\n" is ignored at csv file end"\r\n" 在 csv 文件末尾被忽略
【发布时间】:2016-11-10 21:28:35
【问题描述】:
import csv

impFileName = []
impFileName.append("file_1.csv")
impFileName.append("file_2.csv")

expFileName = "MasterFile.csv"
l = []
overWrite = False
comma = ","

for f in range(len(impFileName)):
    with open(impFileName[f], "r") as impFile:
        table = csv.reader(impFile, delimiter = comma)

        for row in table:
            data_1 = row[0]
            data_2 = row[1]
            data_3 = row[2]
            data_4 = row[3]
            data_5 = row[4]
            data_6 = row[5]

        dic = {"one":data_1, "two":data_2, "three":data_3, "four":data_4, "five":data_5, "six":data_6}

        for i in range(len(l)):
            if l[i]["one"] == data_1:
                print("Data, where one = " + data_1 + " has been updated using the data from " + impFileName[f])
                l[i] = dic
                overWrite = True
                break

        if overWrite == False:
            l.append(dic)
        else:
            overWrite = False
    print(impFileName[f] + " has been added to the list 'l'")

with open(expFileName, "a") as expFile:
    print("Master file now being created...")
    for i in range(len(l)):
        expFile.write(l[i]["one"] + comma + l[i]["two"] + comma + l[i]["three"] + comma + l[i]["four"] + comma + l[i]["five"] + comma + l[i]["six"] + "\r\n")

print("Process Complete")

该程序采用 2 个(或更多).csv 文件并将每行的唯一 ID (data_1) 与所有其他行进行比较。如果它们匹配,则假定当前行是更新版本,因此将其覆盖。如果没有匹配,则为新条目。

我将每一行的数据存储在字典中,然后将其存储在列表“l”中。

处理完所有文件后,我将列表“l”以指定格式输出到“MasterFile.csv”。

---问题---
“File_1.csv”的最后一行和“File_2.csv”的第一行在输出文件的同一行结束。我希望它在新的线路上继续。

--视觉

...
data_1,data_2,data_3,data_4,data_5,data_6
data_1,data_2,data_3,data_4,data_5,data_6DATA_1,DATA_2,DATA_3,DATA_4,DATA_5,DATA_6
DATA_1,DATA_2,DATA_3,DATA_4,DATA_5,DATA_6
...

注意:任何 .csv 文件中都没有标题行。
我也试过在“expFile.write”末尾只使用“\n” - 结果相同

【问题讨论】:

  • 第一个文件的最后一行没有换行符,这种情况并不少见。您必须手动插入一个
  • 我肯定将它们插入到底部附近的“expFile.Write”行 - 在“写入”的末尾我插入“\r\n”(“\r”回车,“ \n" 换行)?

标签: python csv


【解决方案1】:

只是一点建议。以您的方式比较两个文件看起来太昂贵了。尝试按以下方式使用pandas

import pandas
data1 = pandas.read_csv("file_1.csv")
data2 = pandas.read_csv("file_2.csv")

# Merging Two Dataframes 
combinedData = data1.append(data2,ignore_index=True)

# Dropping Duplicates
# give the name of the column on which you are comparing the uniqueness
uniqueData = combinedData.drop_duplicates(["columnName"]) 

【讨论】:

    【解决方案2】:

    我试过运行你的程序,没问题。你唯一的问题是排队

    with open(expFileName, "a") as expFile:
    

    你在哪里使用"a"(作为附加),所以如果你一次又一次地运行你的程序,它会附加到这个文件中。

    使用"w" 而不是"a"

    【讨论】:

      【解决方案3】:

      好的,伙计们。我想我做了一个笨蛋。

      1) 因为我最后使用的是“a”(追加)而不是“w”(写入);以及我忘记清除文件的最后 2 或 3 次测试,我总是在查看相同的(前 50 名左右)行。这意味着我很久以前就修复了我的错误,但仍在查看旧数据....

      2) 回车被读入字典的最后一个值 (data_6),所以当它们被附加到主文件时,我最终得到了“\r\r\n”。

      感谢 Vivek Srinivasan 扩展了我的 Python 知识。我看熊猫玩玩。

      感谢 MariaD 指出“a”/“w”错误。

      感谢 Moses Koledoye 指出“\r”错误。

      很抱歉浪费了您的时间。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-12-07
        • 1970-01-01
        • 2021-04-08
        • 1970-01-01
        • 2013-10-16
        • 1970-01-01
        相关资源
        最近更新 更多