在将数据转换为csv时将数据写入文本文件

时间:2016-05-22 16:41:00

标签: python csv text-files

我对python很新。我有一个.txt文件,并希望将其转换为.csv文件,其格式为我被告知但无法完成。一只手可以用它。我将用截图解释它。

我有一个名为bip.txt的txt文件。其中的数据是like this

我想将其转换为csv,如this csv file

到目前为止,我所能做的只是使用以下代码编写文本文件中的所有数据:

e.key === "Escape"

那么是否有解决方案将其转换为我想要的格式的csv文件?我希望我已经清楚地解释了它。

2 个答案:

答案 0 :(得分:1)

如果您只有一个文件并且您已经知道其名称,则无需使用glob模块。你可以打开它。将您的数据作为文本引用会很有帮助,因为有人想要帮助您的图像不能只复制和粘贴您的输入数据。

对于输入文件中的每个条目,您必须读取多行以收集在输出文件中创建条目所需的信息。

一种方法是循环输入行,直到找到一个以“test:”开头的行,然后使用next()获取文件中的下一行来创建条目:

以下代码将生成您需要的拆分 - 创建csv文件可以使用标准库模块完成,并留作练习。我们使用了不同的文件名,如你所见。

with open("/tmp/blip.txt") as f:
    for line in f:
        if line.startswith("test:"):
            test_name = line.strip().split(None, 1)[1]
            result = next(f)
            if not result.startswith("outcome:"):
                raise ValueError("Test name not followed by outcome for test "+test_name)
            outcome = result.strip().split(None, 1)[1]
            print test_name, outcome

答案 1 :(得分:0)

您不使用glob函数打开文件,它会搜索与模式匹配的文件名。你可以打开文件bip.txt然后读取每一行并将值放入一个数组然后当找到所有的值时用新行和逗号连接它们并写入csv文件,如下所示:

# set the csv column headers
values = [["test", "outcome"]]

current_row = []
with open("bip.txt", "r") as f:
    for line in f:
        # when a blank line is found, append the row
        if line == "\n" and current_row != []:
            values.append(current_row)
            current_row = []

        if ":" in line:
            # get the value after the semicolon
            value = line[line.index(":")+1:].strip()
            current_row.append(value)
    # append the final row to the list
    values.append(current_row)


# join the columns with a comma and the rows with a new line
csv_result = ""
for row in values:
    csv_result += ",".join(row) + "\n"

# output the csv data to a file
with open("Test_Result_Report.csv", "w") as f:
    f.write(csv_result)