Python 计数不正确
我从字典中抓取了一堆单词,并创建了一个包含所有单词的大型CSV文件,每行一个单词 我有另一个功能,它读取大量的CSV文件,然后创建较小的CSV文件 该函数应该创建只有500字/行的CSV文件,但有点不对劲。第一个文件有501个字/行。其余文件有502个字/行 伙计,也许我累了,但我似乎无法在我的代码中找出到底是什么导致了这一点。还是我的代码没有任何问题 下面是我假设导致问题的函数部分。下面可以看到完整的功能 功能的可疑部分Python 计数不正确,python,python-3.x,Python,Python 3.x,我从字典中抓取了一堆单词,并创建了一个包含所有单词的大型CSV文件,每行一个单词 我有另一个功能,它读取大量的CSV文件,然后创建较小的CSV文件 该函数应该创建只有500字/行的CSV文件,但有点不对劲。第一个文件有501个字/行。其余文件有502个字/行 伙计,也许我累了,但我似乎无法在我的代码中找出到底是什么导致了这一点。还是我的代码没有任何问题 下面是我假设导致问题的函数部分。下面可以看到完整的功能 功能的可疑部分 def create_csv_文件(): 限额=500 计数=0 fil
def create_csv_文件():
限额=500
计数=0
filecount=1
zfill=3
文件名='C:\\Users\\Anthony\\Desktop\\scrap\\Dictionary\\terms{}.csv'。格式('1'.zfill(zfill))
打开('C:\\Users\\Anthony\\Desktop\\Scrape\\Results\\dictionary.csv')作为读取文件:
csvReader=csv.reader(readfile)
对于csvReader中的行:
术语=行[0]
如果术语为“”:
术语=术语。替换(“”,“”)
if count所以文件行数奇怪的原因是if-else条件
当count
小于或等于limit
时,可以增加count
。对于您的第一次迭代,您将递增到1,然后编写第一个术语,然后递增,依此类推。因为您使用了=limit
,并创建了一个新文件。在写入CSV文件之后而不是之前,递增计数。这应该会有帮助
def create_csv_files():
limit = 500
count = 0
filecount = 1
zfill = 3
filename = 'C:\\Users\\Anthony\\Desktop\\Scrape\\Dictionary\\terms{}.csv'.format('1'.zfill(zfill))
with open('C:\\Users\\Anthony\\Desktop\\Scrape\\Results\\dictionary.csv') as readfile:
csvReader = csv.reader(readfile)
for row in csvReader:
term = row[0]
if ' ' in term:
term = term.replace(' ', '')
# Remove if and keep else
if count >= limit:
count = 0
filecount += 1
filename = 'C:\\Users\\Anthony\\Desktop\\Scrape\\Dictionary\\terms{}.csv'.format(str(filecount).zfill(zfill))
aw = 'a' if os.path.exists(filename) else 'w'
with open(filename, aw, newline='') as writefile:
fieldnames = [ 'term' ]
writer = csv.DictWriter(writefile, fieldnames=fieldnames)
writer.writerow({
'term': term
})
count += 1 # Increment here
因此,文件的行数奇怪的原因在于if-else条件
当count
小于或等于limit
时,可以增加count
。对于您的第一次迭代,您将递增到1,然后编写第一个术语,然后递增,依此类推。因为您使用了=limit
,并创建了一个新文件。在写入CSV文件之后而不是之前,递增计数。这应该会有帮助
def create_csv_files():
limit = 500
count = 0
filecount = 1
zfill = 3
filename = 'C:\\Users\\Anthony\\Desktop\\Scrape\\Dictionary\\terms{}.csv'.format('1'.zfill(zfill))
with open('C:\\Users\\Anthony\\Desktop\\Scrape\\Results\\dictionary.csv') as readfile:
csvReader = csv.reader(readfile)
for row in csvReader:
term = row[0]
if ' ' in term:
term = term.replace(' ', '')
# Remove if and keep else
if count >= limit:
count = 0
filecount += 1
filename = 'C:\\Users\\Anthony\\Desktop\\Scrape\\Dictionary\\terms{}.csv'.format(str(filecount).zfill(zfill))
aw = 'a' if os.path.exists(filename) else 'w'
with open(filename, aw, newline='') as writefile:
fieldnames = [ 'term' ]
writer = csv.DictWriter(writefile, fieldnames=fieldnames)
writer.writerow({
'term': term
})
count += 1 # Increment here
到底是什么地方出了问题?@彻底崩溃了哦,为什么它删除了我的一段?!?!第一个文件有501个字/行。其余的文件有502个字/行。为什么不使用熊猫来进行此类操作?这很简单,也很容易理解。参考@Vishnudev不知道pandas isPandas是一个用于数据操作和分析的库。特别是大数据可以以快速和全面的方式进行操作。它提供数据结构来保存数据。示例Dataframe
(具有行和列的二维数据结构)可用于保存csv
数据。使用pandas.read_csv
读取csv数据。到底出了什么问题?@完全被破坏了哦,它删除了我的一段文字?!?!第一个文件有501个字/行。其余的文件有502个字/行。为什么不使用熊猫来进行此类操作?这很简单,也很容易理解。参考@Vishnudev不知道pandas isPandas是一个用于数据操作和分析的库。特别是大数据可以以快速和全面的方式进行操作。它提供数据结构来保存数据。示例Dataframe
(具有行和列的二维数据结构)可用于保存csv
数据。使用pandas.read_csv
读取csv数据。哦,对了,顺序是个问题,因为在计数器重置为0,然后再添加另一个计数器的情况下,因此当添加第二个计数器时,计数器将仅为1。先增加然后改变条件应该可以解决这个问题。这也可以通过重置为1
而不是0
i来解决believe@BugWhisperer我也想提出这个建议,但我有点强迫性,因为我喜欢我的计数器从相同的数字开始。但是,是的,这也会起作用。“你仍然需要把else条款变成一个严格的不平等条款。”同样,我认为你应该看看熊猫的建议。这会使你的功能更短。您可以将数据帧切片为所需的实际行数。我需要所有行,因此这不是一个因素。出于好奇,请简化我的代码的哪一部分?哦,对了,顺序是个问题,因为它会在计数器重置为0,然后再添加另一个计数器的情况下结束,因此当添加第二个计数器时,计数器将仅为1。先增加然后改变条件应该可以解决这个问题。这也可以通过重置为1
而不是0
i来解决believe@BugWhisperer我也想提出这个建议,但我有点强迫性,因为我喜欢我的计数器从相同的数字开始。但是,是的,这也会起作用。“你仍然需要把else条款变成一个严格的不平等条款。”同样,我认为你应该看看熊猫的建议。这会使你的功能更短。您可以将数据帧切片为所需的实际行数。我需要所有行,因此这不是一个因素。出于好奇,请简化我的代码的哪一部分?
def create_csv_files():
limit = 500
count = 0
filecount = 1
zfill = 3
filename = 'C:\\Users\\Anthony\\Desktop\\Scrape\\Dictionary\\terms{}.csv'.format('1'.zfill(zfill))
with open('C:\\Users\\Anthony\\Desktop\\Scrape\\Results\\dictionary.csv') as readfile:
csvReader = csv.reader(readfile)
for row in csvReader:
term = row[0]
if ' ' in term:
term = term.replace(' ', '')
# Remove if and keep else
if count >= limit:
count = 0
filecount += 1
filename = 'C:\\Users\\Anthony\\Desktop\\Scrape\\Dictionary\\terms{}.csv'.format(str(filecount).zfill(zfill))
aw = 'a' if os.path.exists(filename) else 'w'
with open(filename, aw, newline='') as writefile:
fieldnames = [ 'term' ]
writer = csv.DictWriter(writefile, fieldnames=fieldnames)
writer.writerow({
'term': term
})
count += 1 # Increment here