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、 如果文件不是很大,那么将整个输入文件存储在内存中然后打印一次会更快。因此,目前我无法判断您的解决方案是否优于我的解决方案。事实上,我完全正确。这并不意味着只要有足够的文件,您就无法将整个文件读取到内存中;但这是一个常见的初学者错误假设这不重要,然后他们会感到困惑,因为他们的程序在玩具输入上工作,但在生产中无法使用。