Python 在不自动分离内容的情况下打开csv文件

Python 在不自动分离内容的情况下打开csv文件,python,python-3.x,csv,Python,Python 3.x,Csv,我有一个csv,其中包含如下文本 AAABBBBCCCDDDDDDD EEEFFFRRRTTTHHHYY 当我运行如下代码时: rows = csv.reader(csvfile) for row in rows: print(" ".join('%s' %row for row in rows)) AAABBBBCCCDDDDDDDEEEFFFRRRTTTHHHYY 其项目如下: ['AAABBBBCCCDDDDDDD'] ['EEEFFFRRRTTTHHHYY'] 但我想

我有一个
csv
,其中包含如下文本

AAABBBBCCCDDDDDDD
EEEFFFRRRTTTHHHYY
当我运行如下代码时:

rows = csv.reader(csvfile)
  for row in rows:
    print(" ".join('%s' %row for row in rows))
AAABBBBCCCDDDDDDDEEEFFFRRRTTTHHHYY
其项目如下:

['AAABBBBCCCDDDDDDD']
['EEEFFFRRRTTTHHHYY']
但我想显示为一系列单词,如下所示:

rows = csv.reader(csvfile)
  for row in rows:
    print(" ".join('%s' %row for row in rows))
AAABBBBCCCDDDDDDDEEEFFFRRRTTTHHHYY

代码中有什么错误吗?

您的示例看起来只需要

with open(csvfile) as inputfile: # misnomer; not really proper CSV
    for row in inputfile:
        print(row.rstrip('\n'), end='')

您可以从一个空字符串开始,对于从csv文件读取的每一行,删除末尾的换行符并将内容添加到空字符串中

joined = ""

with open(csvfile) as f:
    for row in f:
        joined = joined + row.replace("\n","")

print(joined)
输出:

>> AAABBBBCCCDDDDDDDEEEFFFRRRTTTHHHYY

您提供的示例看起来不像csv文件。它看起来像一个简单的文本文件。您可以使用以下简单的方法:

Input.txt

AAABBBBCCCDDDDDDD
EEEFFFRRRTTTHHHYY
解决方案.py

input_filename = "Input.txt"

with open(input_filename) as input_file:
    print("".join(x.rstrip('\n') for x in input_file))
这是利用:

  • 可以对文件对象进行迭代。这将在每次迭代中为您提供一个新行
  • 从文件中接收到的每一行的末尾都有换行符。由于您似乎不想要它,我们使用该方法将其删除
  • 这种方法可以接受任何一种情况,甚至是一种简单的计算方法
  • 这将帮助我们创建一个iterable,它将被
    .join()
    接受,使用
    .rstrip()
    格式化来自输入文件的每一行
编辑:好的,让我们进一步分解我的答案:

  • 当你打开一个文件时,你可以对它进行迭代。用最简单的方式来解释它,假设它意味着在它上面做一个循环(
    对于input\u文件中的行:…
  • 不仅如此,使用迭代器,您还可以通过转换每个元素来创建另一个迭代器。这就是a或者,在我选择的情况下,a所做的。因此表达式
    (x.rstrip()表示输入文件中的x)
    将是一个迭代器,它接受输入文件
    的每个元素并应用于它
  • string方法将迭代器提供的元素粘合在一起,使用该字符串作为分隔符。因为我在这里使用空字符串,所以不会有分隔符。我已经为此使用了之前定义的迭代器
  • 然后,我使用前面介绍的
    .join()
    操作提供的字符串
    print()

我对我的答案做了一个小的修正,因为有一种边缘情况,即如果输入文件中的一行末尾有空格或制表符,那么如果我使用
x.rstrip()
而不是
x.rstrip('\n')

,则由于列表理解,它们将被删除两次。您正在对文件中的每一行遍历整个文件。您打算执行
打印(“”。加入(“%s”%item for item in row))
。您也不需要对列表进行理解,只需执行
打印(“.join(row))
。如果没有逗号分隔的值,则它不是CSV。这看起来只是一个基本的文本文件。另外,如果不想在连接的值之间留一个空格,为什么要在空格上连接?csv是一个文本文件,但不是所有的文本文件都是csv。这个不是,所以在上面使用csv模块没有意义。只需将其作为纯文本进行处理。我使用了这种方法,而且效果很好!只是不确定“.join(x.rstrip()的逻辑这似乎与我的答案一致,除了一次把整个输入文件读入内存中的低效和不引人注意的细节。@新学习者:我已经修改了我的答案以给你更多的细节。告诉我们它是否有助于你更好地理解。如果你这样做,你会考虑吗?@ TrPiele:你不是完全错的,但是我们的输入文件没有多大。s、 如果文件不是很大,那么将整个输入文件存储在内存中然后打印一次会更快。因此,目前我无法判断您的解决方案是否优于我的解决方案。事实上,我完全正确。这并不意味着只要有足够的文件,您就无法将整个文件读取到内存中;但这是一个常见的初学者错误假设这不重要,然后他们会感到困惑,因为他们的程序在玩具输入上工作,但在生产中无法使用。